【问题标题】:Combining data in several rows into one row将多行中的数据合并为一行
【发布时间】:2018-01-19 00:19:34
【问题描述】:

我在 SQL 中合并(合并)行时遇到困难:我正在寻找包含

的行

CLIENTID,所有级别的总计数,级别计数(在每个级别)。

这是一个例子:

ClientID    Total Counts    Level1  Level2  Level3
1234566     12              9        3      0

这是我拥有的代码,我对它进行了扭曲和转换,但它总是很短:它在每个级别都给我空值,除了那个。但我希望数据全部组合成一行。提前非常感谢你

            SELECT u.clientID AS CLIENTID_SHORT, 
            CASE WHEN LEVEL='1' THEN COUNT(*) END AS Level1,
            CASE WHEN LEVEL='2' THEN COUNT(*) END AS Level2,
            CASE WHEN LEVEL='3' THEN COUNT(*) END AS Level3,
            CASE WHEN LEVEL='4' THEN COUNT(*) END AS Level4,
            CASE WHEN LEVEL='5' THEN COUNT(*) END AS Level5
            FROM CLIENTPROFILE u
            GROUP BY u.ClientID, u.LEVEL
            ORDER BY CLIENTID_SHORT

【问题讨论】:

标签: sql-server tsql sql-server-2012


【解决方案1】:

case 声明之上应用count

SELECT u.clientID AS CLIENTID_SHORT,
       Count(*) AS TotalLevelCount,
       Count(CASE WHEN LEVEL = 1 THEN 1 END) AS Level1,
       Count(CASE WHEN LEVEL = 2 THEN 1 END) AS Level2,
       Count(CASE WHEN LEVEL = 3 THEN 1 END) AS Level3,
       Count(CASE WHEN LEVEL = 4 THEN 1 END) AS Level4,
       Count(CASE WHEN LEVEL = 5 THEN 1 END) AS Level5
FROM   CLIENTPROFILE u
WHERE  LEVEL >= 1
       AND Level <= 5
GROUP  BY u.ClientID
ORDER  BY CLIENTID_SHORT 

注意:在检查整数列时不必使用单引号。

【讨论】:

  • 你不应该按u.Level分组
  • @Lamak 甚至问这个问题让我觉得很傻。但我不知道你能做到这一点。又是一个愚蠢的问题,为什么我们不应该按级别分组?我认为我们应该......否则,它会给出一个错误,即 Level 不是聚合函数的一部分
  • @LearnByReading 但LEVEL 在一个聚合函数中。您可以尝试上一个查询并查看它对结果的影响。基本上每个clientId 不会有一行,而是clientID - LEVEL 的每个组合都有一行
  • @LearnByReading - 您可以改用Count(*)
  • @Pரதீப் 这是真的。但是,我认为这可能包括超出范围的结果(例如 Level = 6 或更高。
猜你喜欢
  • 1970-01-01
  • 2016-04-27
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
相关资源
最近更新 更多