【问题标题】:Convert rows to columns after counting [duplicate]计数后将行转换为列[重复]
【发布时间】:2013-07-26 15:39:40
【问题描述】:

我有下表:

Type1 Type2
A      T1
A      T2
A      T1
A      T1
A      T2
A      T3
B      T3
B      T2
B      T3
B      T3

我想输出为:

Type1 T1 T2 T3
A     3  2  1
B     0  1  3

我尝试使用 ROW_NUMBER() OVER (ORDER BY) 和 CASE 语句,但无法获得所需的输出。请帮忙。提前致谢。

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    尝试使用 PIVOT -

    查询 1:

    DECLARE @temp TABLE (Type1 CHAR(1), Type2 CHAR(2))
    
    INSERT INTO @temp (Type1, Type2)
    VALUES 
         ('A', 'T1'),('A', 'T2'),
         ('A', 'T1'),('A', 'T1'),
         ('A', 'T2'),('A', 'T3'),
         ('B', 'T3'),('B', 'T2'),
         ('B', 'T3'),('B', 'T3')
    
    SELECT *
    FROM @temp
    PIVOT 
    (
         COUNT(Type2) FOR Type2 IN (T1, T2, T3)
    ) p
    

    查询 2:

    SELECT
          Type1
        , T1 = COUNT(CASE WHEN Type2 = 'T1' THEN 1 END)
        , T2 = COUNT(CASE WHEN Type2 = 'T2' THEN 1 END)
        , T3 = COUNT(CASE WHEN Type2 = 'T3' THEN 1 END)
    FROM @temp
    GROUP BY Type1
    

    输出:

    Type1 T1          T2          T3
    ----- ----------- ----------- -----------
    A     3           2           1
    B     0           1           3
    

    【讨论】:

    【解决方案2】:
    SELECT Type1, 
           SUM(CASE WHEN Type2='T1' THEN 1 ELSE 0 END) AS T1,
           SUM(CASE WHEN Type2='T2' THEN 1 ELSE 0 END) AS T2,
           SUM(CASE WHEN Type2='T3' THEN 1 ELSE 0 END) AS T3
    FROM your_table
    GROUP BY Type1
    

    【讨论】:

    • 请注意END AS T1 是无效语法。
    • @Devart thx ,已编辑。 +1 我对 PIVOT 的了解:D
    • +1 - 为好答案。
    • @Tim Schmelter 谢谢
    【解决方案3】:

    这会起作用

    SELECT 
    (SELECT count(*) FROM table1 WHERE type2 = 'T1' AND type1 = mTable1.type1) AS T1,
    (SELECT count(*) FROM table1 WHERE type2 = 'T2' AND type1 = mTable1.type1) AS T2,
    (SELECT count(*) FROM table1 WHERE type2 = 'T3' AND type1 = mTable1.type1) AS T3
    FROM table1 mTable1 GROUP BY type1
    

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 2013-10-01
      • 2023-03-14
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2019-10-14
      相关资源
      最近更新 更多