猿问

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

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


TSTAMP  SYSTEM  MODE    BOARD   CHANNEL USED    TOTAL   BOARDID STATUS

“SYSTEM”包含 1 - 3 的值。


第一个查询将查找 System matching 1 和 Channel count 以及 Used max 和 Status <> free。


然后再次进行系统匹配 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。


慕码人8056858
浏览 78回答 1
1回答

繁星淼淼

目前还不清楚你从哪里得到时间。但是为了拆分成列,我会使用如下的 Case 语句。我不知道你的计算结果,但不是 t.Channel,而是你的公式。如果需要求和,则从 MAX 切换到 SUM。将 t.Hour 替换为您获取小时数的表。如果没有意义,请发布您的联合查询,我会根据用例进行调整。SELECTt.HourMAX(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) T3BoardFROM PDWPeriod tGROUP BY&nbsp;t.Hour基于您的新查询:SELECT DATEPART(hh, TSTAMP) AS Hour,&nbsp;COUNT(CASE WHEN System=1 THEN CHANNEL END) Processed1,&nbsp;max(CASE WHEN System=1 THEN [USED] END)as MaxUsed1,COUNT(CASE WHEN System=2 THEN CHANNEL END) Processed2,&nbsp;max(CASE WHEN System=2 THEN [USED] END)as MaxUsed2,COUNT(CASE WHEN System=3 THEN CHANNEL END) Processed3,&nbsp;max(CASE WHEN System=3 THEN [USED] END)as MaxUsed3,COUNT(CASE WHEN System=4 THEN CHANNEL END) Processed4,&nbsp;max(CASE WHEN System=4 THEN [USED] END)as MaxUsed4FROM [PINELLASLAB].[dbo].[TelematicPhysicalLines]&nbsp;WHERE TSTAMP >= '2019-02-27' AND TSTAMP < '2019-02-28'&nbsp;AND STATUS <> 'free'&nbsp;GROUP BY DATEPART(dd, TSTAMP), DATEPART(hour, TSTAMP)&nbsp;
随时随地看视频慕课网APP
我要回答