繁体   English   中英

SQL Server,将 CASE 语句聚合为一行

[英]SQL Server, aggregate CASE statements into one single row

我需要在我的选择中聚合 CASE 语句,以便它们计算为一行。 或者我不需要 - 必须,但它会在之后制作一个更好的电子表格

我的查询是这样的:

SELECT
    me.gardsnr
    ,me.bruksnr
    ,me.festenr
    ,me.seksjonsnr
    ,COUNT(Case when be.bruksenhetstypeKode = 'A' THEN (be.bruksenhetstypeKode)  END) AS 'A'
    ,COUNT(Case when be.bruksenhetstypeKode = 'B' THEN (be.bruksenhetstypeKode) END) AS 'B'
    ,COUNT(Case when be.bruksenhetstypeKode = 'F' THEN (be.bruksenhetstypeKode) END) AS 'F'
    ,COUNT(Case when be.bruksenhetstypeKode = 'I' THEN (be.bruksenhetstypeKode) END) AS 'I'
    ,COUNT(Case when be.bruksenhetstypeKode = 'U' THEN (be.bruksenhetstypeKode) END) AS 'U'
FROM 
    Bruksenhet be
INNER JOIN 
    Matrikkelenhet me ON be.matrikkelenhetID = me.id
GROUP BY
    me.gardsnr
    ,me.bruksnr
    ,me.festenr
    ,me.seksjonsnr
    ,be.bruksenhetstypeKode

这将返回以下结果:

例子

像第 1 行和第 2 行 - 我想将这两行合并为一行,即只有一行用于gardsnr = 1、bruksnr = 4、festenr = 0 和 seksjonsnr = 0 - 'A' 列中为 5,列中为 3 '你'

希望这是有道理的?

您不需要GROUP BY be.bruksenhetstypeKode 去掉它:

GROUP BY me.gardsnr, me.bruksnr, me.festenr, me.seksjonsnr

COUNT()的结构有点复杂。 我通常使用SUM()写这个,所以我会这样做:

SELECT me.gardsnr, me.bruksnr, me.festenr, me.seksjonsnr,
       SUM(Case when be.bruksenhetstypeKode = 'A' THEN 1 ELSE 0 END) AS A,
       SUM(Case when be.bruksenhetstypeKode = 'B' THEN 1 ELSE 0 END) AS B,
       SUM(Case when be.bruksenhetstypeKode = 'F' THEN 1 ELSE 0 END) AS F,
       SUM(Case when be.bruksenhetstypeKode = 'I' THEN 1 ELSE 0 END) AS I
FROM Bruksenhet be INNER JOIN
     Matrikkelenhet me
     ON be.matrikkelenhetID = me.id
GROUP BY me.gardsnr, me.bruksnr, me.festenr, me.seksjonsnr;

我建议您不要对列别名使用单引号。 这只会导致混乱。 仅对字符串和日期常量使用单引号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM