SQL內有以下資料
日期 時間 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
為了要做趨勢圖分類,需要將pH資料依照不同的DeviceName拆為不同欄位
日期 時間 pH-100 pH-100
2024-11-12 00:21 8.19 7.31
2024-11-12 03:51 8.19 7.28
請問有沒有什麼方式可以達成?
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;
引用 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
如果你的 SQL 支援 PIVOT(例如 SQL Server),可以使用:
SELECT *
FROM (
SELECT
日期,
時間,
DeviceName,
pH
FROM your_table
) AS SourceTable
PIVOT (
MAX(pH)
FOR DeviceName IN ([100], [101])
) AS PivotTable;
想問清楚一下,
日期/時間/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 ?