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 ?