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 ?