SQL我可以从两个查询中获得一个结果表,以便它们在不同列中对齐数据

时间:2019-03-26 20:00:58

标签: c# sql

我有一个包含9列的SQL表:

TSTAMP  SYSTEM  MODE    BOARD   CHANNEL USED    TOTAL   BOARDID STATUS

“系统”的值是1-3。

第一个查询将查找与系统1和通道数匹配的系统,以及已使用的最大数量和状态<>免费。

  • 然后再次进行系统匹配2等
  • 然后再次进行系统匹配3

我想(按小时使用(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。

1 个答案:

答案 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)