Select with Case - объединение результатов в одну запись - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть запрос следующим образом

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. 16 109 Потолки NULL 14101.47 NULL NULL
  2. 16 109 Потолки NULL NULL 227,68 NULL

Как я могу объединить результаты в одну строку, например

  1. 16 109 Потолки NULL 14101,47 227,68 NULL

Спасибо

1 Ответ

0 голосов
/ 01 ноября 2018

Это то, что вы ищете?

Я переместил 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;
...