我得到的是这样的:如何选择每个GROUP BY项目作为单独的列?
MachID DownCode DownTime
PR01 COMP 30.83
PR02 DIE SET 378.205277777778
PR02 Die Wait 88.0533333333333
PR03 ColorChg 8.54194444444444
PR04 DieStart 0.205277777777778
从查询:
SELECT MachID, DownCode, SUM(EndTime - StartTime)/3600 AS DownTime
FROM vReportDownLog
GROUP BY MachID, DownCode
但我真的希望是这样的:
MachID ColorChg COMP DIE SET DieStart Die Wait
PR01 0 30.83
PR02 0 0 378.205 0 88.0533
PR03 8.5419 0 0 0 0
PR04 0 0 0 0.2052 0
这将是更容易使用与谷歌的数据这种方式可视化。
基本上,我希望第一个GROUP BY
列作为左列,第二个GROUP BY
列作为列标题,它们之间的数字值通常就像表一样。
一点的工作后,我得到了动态SQL的修改版本的工作:
BEGIN TRANSACTION
DECLARE @UsePivot as VARCHAR(MAX)
DECLARE @sql VARCHAR(MAX)
-- clever way of concatenating the rows of that column
-- just a little bit cleaner than using a cursor
-- and probably faster, too. Requires I think SQL 2008+
SELECT @UsePivot =
STUFF((
SELECT DISTINCT ',[' + DownCode + ']'
FROM DownCodes
FOR XML PATH('')
), 1, 1, '')
SET @sql = '
SELECT MachID, ' + @UsePivot + ' FROM
(
SELECT MachID, DownCode, SUM(CAST(EndTime AS Float) - CAST(StartTime AS Float))/3600 AS DownTime
FROM vReportDownLog
GROUP BY
MachID, DownCode
) TBL
PIVOT
(
SUM(DownTime)
FOR DownCode IN (' + @UsePivot + ')
)
AS Pvt'
EXEC (@sql)
ROLLBACK
可能是一个['pivot'](http://technet.microsoft.com/en-us/library/ms177410(V = SQL.105)的.aspx) – 2014-08-29 15:54:40