我有一个包含9列的SQL表:
TSTAMP SYSTEM MODE BOARD CHANNEL USED TOTAL BOARDID STATUS
“系统”的值是1-3。
第一个查询将查找与系统1和通道数匹配的系统,以及已使用的最大数量和状态<>免费。
我想(按小时使用(24小时格式))按列排列数据,第1列中的24小时按行下降。
我知道我可以单独进行每个查询,但是对于SQL还是陌生的,我不确定是什么命令使结果表与我喜欢的方式保持一致。
我想要的结果基本上是这样的:
Telematic 1 Hour Processed MaxUsed Telematic 2 Hour Processed MaxUsed Telmatic 3 Hour Processed MaxUsed
1 10 585 17 2 10 583 16 3 10 584 15
1 4 8 1 2 4 14 2 3 4 8 1
对不起,请环绕。
我可以使用UNION,但是只创建4列。不是我要找的12。
答案 0 :(得分:0)
目前尚不清楚您从哪里得到时间。但是对于拆分为列,我将使用Case语句,如下所示。我不知道您的计算,但请输入您的公式,而不是t.Channel。如果需要求和,请从MAX切换到SUM。将t.Hour替换为获取小时数的表格。
如果这没有意义,请发布您的并集查询,我将调整以适应用例。
SELECT
t.Hour
MAX(CASE WHEN t.System=1 THEN t.Channel END) T1Channel,
MAX(CASE WHEN t.System=1 THEN t.Board END) T1Board,
MAX(CASE WHEN t.System=2 THEN t.Channel END) T2Channel,
MAX(CASE WHEN t.System=2 THEN t.Board END) T2Board,
MAX(CASE WHEN t.System=3 THEN t.Channel END) T3Channel,
MAX(CASE WHEN t.System=3 THEN t.Board END) T3Board
FROM PDWPeriod t
GROUP BY
t.Hour
基于您的新查询:
SELECT DATEPART(hh, TSTAMP) AS Hour,
COUNT(CASE WHEN System=1 THEN CHANNEL END) Processed1,
max(CASE WHEN System=1 THEN [USED] END)as MaxUsed1,
COUNT(CASE WHEN System=2 THEN CHANNEL END) Processed2,
max(CASE WHEN System=2 THEN [USED] END)as MaxUsed2,
COUNT(CASE WHEN System=3 THEN CHANNEL END) Processed3,
max(CASE WHEN System=3 THEN [USED] END)as MaxUsed3,
COUNT(CASE WHEN System=4 THEN CHANNEL END) Processed4,
max(CASE WHEN System=4 THEN [USED] END)as MaxUsed4
FROM [PINELLASLAB].[dbo].[TelematicPhysicalLines]
WHERE TSTAMP >= '2019-02-27' AND TSTAMP < '2019-02-28'
AND STATUS <> 'free'
GROUP BY DATEPART(dd, TSTAMP), DATEPART(hour, TSTAMP)