带案例选择-将结果合并为单个记录

时间:2018-11-01 17:53:29

标签: sql-server sql-server-2012

我有如下查询

SELECT        
FGB.TEMPLATE_DETAILS_REF, FGB.TEMPLATE_STRUCTURE_REF, FGB.DFEE_ELEMENT, 
    CASE 
    WHEN Condition = 'A' THEN SUM(FGS.Weighted) END AS CondA, 
    CASE 
    WHEN Condition = 'B' THEN SUM(FGS.Weighted) END AS CondB, 
    CASE 
    WHEN Condition = 'C' THEN SUM(FGS.Weighted) END AS CondC, 
    CASE 
    WHEN Condition = 'D' THEN SUM(FGS.Weighted) END AS CondD
    FROM            FGBlockSummary AS FGB INNER JOIN
                             FGSurveyItem AS FGS ON FGB.TEMPLATE_DETAILS_REF = FGS.TEMPLATE_DETAILS_REF AND FGB.TEMPLATE_STRUCTURE_REF = FGS.TEMPLATE_STRUCTURE_REF AND 
                             FGB.DFEE_ELEMENT = FGS.DFEE_ELEMENT
    GROUP BY FGB.TEMPLATE_DETAILS_REF, FGB.TEMPLATE_STRUCTURE_REF, FGB.DFEE_ELEMENT, FGS.Condition

产生的结果如下:

  1. 16109个天花板NULL 14101.47 NULL NULL
  2. 16109个天花板NULL NULL 227.68 NULL

如何将结果合并为一行,例如

  1. 16109个天花板为空14101.47 227.68为空

谢谢

1 个答案:

答案 0 :(得分:1)

这是您要找的吗?

我将SUM移到了CASE之外,并从FGS.Condition中淘汰了GROUP BY。将NULL的值更改为'0'会有副作用,但这可能可以接受吗?

SELECT
  FGB.TEMPLATE_DETAILS_REF
 ,FGB.TEMPLATE_STRUCTURE_REF
 ,FGB.DFEE_ELEMENT
 ,CondA = SUM( 
          CASE
            WHEN FGS.Condition = 'A' THEN FGS.Weighted
            ELSE 0
          END)
 ,CondB = SUM( 
          CASE
            WHEN FGS.Condition = 'B' THEN FGS.Weighted
            ELSE 0
          END)
 ,CondC = SUM( 
          CASE
            WHEN FGS.Condition = 'C' THEN FGS.Weighted
            ELSE 0
          END)
 ,CondD = SUM( 
          CASE
            WHEN FGS.Condition = 'D' THEN FGS.Weighted
            ELSE 0
          END)
FROM
  FGBlockSummary AS FGB
INNER JOIN
  FGSurveyItem   AS FGS
    ON
    FGB.TEMPLATE_DETAILS_REF = FGS.TEMPLATE_DETAILS_REF
      AND FGB.TEMPLATE_STRUCTURE_REF = FGS.TEMPLATE_STRUCTURE_REF
      AND FGB.DFEE_ELEMENT = FGS.DFEE_ELEMENT
GROUP BY
  FGB.TEMPLATE_DETAILS_REF
 ,FGB.TEMPLATE_STRUCTURE_REF
 ,FGB.DFEE_ELEMENT;