SQL内有以下资料日期 时间 DeviceName pH2024-11-12 00:21 100 8.192024-11-12 03:51 100 8.192024-11-12 00:21 101 7.312024-11-12 03:51 101 7.28

为了要做趋势图分类,需要将pH资料依照不同的DeviceName拆为不同栏位日期 时间 pH-100 pH-1002024-11-12 00:21 8.19 7.312024-11-12 03:51 8.19 7.28

请问有没有什么方式可以达成?

5 个回答

  • 旧至新
  • 新至旧
  • 最高Like数

0

尼克

iT邦大师 1 级 ‧ 2025-02-11 17:52:29

STRING_SPLIT (Transact-SQL)

4

rogeryao

iT邦超人 7 级 ‧ 2025-02-11 19:03:10

CREATE TABLE aa (
  a1 varchar(20), -- 日期
  a2 varchar(20), -- 时间
  a3 varchar(20), -- DeviceName
  a4 float        -- pH  
);

INSERT INTO aa VALUES 
(\'2024-11-12\',\'00:21\',\'100\',8.19),
(\'2024-11-12\',\'03:51\',\'100\',8.19),
(\'2024-11-12\',\'00:21\',\'101\',7.31),
(\'2024-11-12\',\'03:51\',\'101\',7.28);
SELECT *
FROM (
  SELECT a1,a2,\'pH-\'+a3 AS a3,a4
  FROM aa
) AS X
PIVOT
(
  SUM(a4)
  FOR a3 IN 
  ([pH-100], [pH-101])
) AS PVT
ORDER BY a1,a2;

Demo

请参阅 : [SQL]使用PIVOT


  • 3

一级屠猪士

iT邦大师 1 级 ‧
2025-02-12 07:05:20

Demo按我前往

修改

尼克

iT邦大师 1 级 ‧
2025-02-12 11:31:11

依据内文我猜测,应该是同一个栏位要分拆文字。

修改

kw6732

iT邦研究生 3 级 ‧
2025-02-13 10:32:46

这看起来是正解了~

修改

1

纯真的人

iT邦大师 1 级 ‧ 2025-02-12 08:43:33

引用 rogeryao 大大的初始值

依据资料动态内容,直转横显示

create table aa(
  [日期] varchar(20),
  [时间] varchar(20),
  [DeviceName] varchar(20),
  [pH] float
);

INSERT INTO aa VALUES 
(\'2024-11-12\',\'00:21\',\'100\',8.19),
(\'2024-11-12\',\'03:51\',\'100\',8.19),
(\'2024-11-12\',\'00:21\',\'101\',7.31),
(\'2024-11-12\',\'03:51\',\'101\',7.28);
declare @GroupMaxStr nvarchar(max)

select @GroupMaxStr=stuff((
	select \',[pH-\' + [DeviceName] + \']\'
	from aa a
	group by \',[pH-\' + [DeviceName] + \']\'
	order by \',[pH-\' + [DeviceName] + \']\'
	for xml path(\'\')
),1,1,\'\')

declare @SQL nvarchar(max) = N\'
	select [日期]
	,[时间]
	,\' + @GroupMaxStr + N\'
	from (
		select [日期]
		,[时间]
		,\'\'pH-\'\' + [DeviceName] [DeviceName]
		,[pH]
		from aa
	) k
	PIVOT
	(
	  Max([pH])
	  FOR [DeviceName] IN 
	  (\' + @GroupMaxStr + \')
	) AS PVT
\'
exec sp_executesql @SQL

测试Demo
https://dbfiddle.uk/j3J2cCJW

1

zivzhong

iT邦研究生 4 级 ‧ 2025-02-12 14:55:34

如果你的 SQL 支援 PIVOT(例如 SQL Server),可以使用:

SELECT *
FROM (
    SELECT 
        日期, 
        时间, 
        DeviceName, 
        pH
    FROM your_table
) AS SourceTable
PIVOT (
    MAX(pH) 
    FOR DeviceName IN ([100], [101])
) AS PivotTable;

0

victorc

iT邦新手 5 级 ‧ 2025-02-17 10:51:08

想问清楚一下,

日期/时间/DeviceName/pH
2024-11-12 00:21 100 8.19
2024-11-12 03:51 100 8.19
2024-11-12 00:21 101 7.31
2024-11-12 03:51 101 7.28

DeviceName 是 100, 101
pH 是 8.19,7.31, 7.28 ?