首页 > 解决方案 > 将 SQL 行标题转置到第一列

问题描述

转置以下查询结果的最短、最快、最简单的方法是什么?我希望 0-3 和 3-6 显示在第一列中。对不起,但如果我不伸出援手,这是会让我困惑好几天的事情之一。提前致谢。

SELECT SUM (CASE WHEN CMAPR BETWEEN 0 AND 3 THEN 1 ELSE 0 END) AS [0-3],
       SUM (CASE WHEN CMAPR BETWEEN 3.01 AND 6 THEN 1 ELSE 0 END) AS [3-6]
FROM TBL

在此处输入图像描述

当前结果:

标签: sqlpivottranspose

解决方案


使用聚合:

SELECT (CASE WHEN CMAPR >= 0 AND CMAPR <=3 THEN '0-3'
             WHEN CMAPR <= 6 THEN '3-6'
             ELSE 'Other'
        END) AS grp, COUNT(*)
FROM tbl
GROUP BY (CASE WHEN CMAPR >= 0 AND CMAPR <=3 THEN '0-3'
               WHEN CMAPR <= 6 THEN '3-6'
               ELSE 'Other'
          END);

唯一的缺点是,如果它没有行,它将不会返回一个组。

您可以通过执行以下操作简单地取消您的查询:

SELECT v.*
FROM (SELECT SUM (CASE WHEN CMAPR BETWEEN 0 AND 3 THEN 1 ELSE 0 END) AS [0-3],
             SUM (CASE WHEN CMAPR BETWEEN 3.01 AND 6 THEN 1 ELSE 0 END) AS [3-6]
      FROM TBL
     ) x CROSS APPLY
     (VALUES ('[0-3]', [0-3]), ('[3-6]', [3-6])) v(which, val);

推荐阅读