SQL, объединяющий несколько строк в одну

#sql #sql-server

Вопрос:

Я получил следующую инструкцию SQL, результаты которой приведены в первой таблице ниже. Моя цель-получить результат, как показано в нижней таблице. Как мне этого добиться?

 SELECT tabDynValues.Dynamic_Field_ID,
       tabDynValues.Record_ID,
       CASE Dynamic_Field_ID
        WHEN 755 THEN tabDynValues.Value_Char
       END Filiale,
       CASE Dynamic_Field_ID
        WHEN 756 THEN tabDynValues.Value_Double
       END AD,
       CASE Dynamic_Field_ID
        WHEN 757 THEN tabDynValues.Value_Double
       END Vertrieb,
       CASE Dynamic_Field_ID
        WHEN 758 THEN tabDynValues.Value_Double
       END Expansion
  FROM CI_AM_Dynamic_Field_Value tabDynValues
 WHERE tabDynValues.Activity_ID = 100612
   AND tabDynValues.Dynamic_Field_ID IN (SELECT Dynamic_Field_ID
                                           FROM CI_AM_Dynamic_Field
                                          WHERE Dynamic_Field_Group_ID = 238)
ORDER BY tabDynValues.Record_ID, tabDynValues.Dynamic_Field_ID
 
Dynamic_Field_ID Идентификатор записи Filiale реклама Vertrieb Расширение
755 1 1111 Mitte нулевой нулевой нулевой
756 1 нулевой 123 нулевой нулевой
757 1 нулевой нулевой 56 нулевой
758 1 нулевой нулевой нулевой 45
755 2 2222 Ost нулевой нулевой нулевой
756 2 нулевой нулевой 120 нулевой
755 3 3333 Запад нулевой нулевой нулевой
756 3 нулевой 123 нулевой нулевой
757 3 нулевой нулевой 456 нулевой
758 3 нулевой нулевой нулевой 789
Dynamic_Field_ID Идентификатор записи Filiale реклама Vertrieb Расширение
1 1111 Mitte 123 56 45
2 2222 Ost 120 нулевой нулевой
3 3333 Запад 123 456 789

Комментарии:

1. Сделайте ГРУППУ! !

2. @jarlh ГРУППА BY здесь не работает.

3. @Raphnika, определенно, ГРУППА работает здесь.

Ответ №1:

Просто добавьте a GROUP BY и оберните свои выражения регистра внутри MAX функции:

 SELECT
    tabDynValues.Record_ID,
    MAX(CASE Dynamic_Field_ID WHEN 755 THEN tabDynValues.Value_Char END) Filiale,
    MAX(CASE Dynamic_Field_ID WHEN 756 THEN tabDynValues.Value_Double END) AD,
    MAX(CASE Dynamic_Field_ID WHEN 757 THEN tabDynValues.Value_Double END) Vertrieb,
    MAX(CASE Dynamic_Field_ID WHEN 758 THEN tabDynValues.Value_Double END) Expansion
FROM CI_AM_Dynamic_Field_Value tabDynValues
WHERE tabDynValues.Activity_ID = 100612 AND tabDynValues.Dynamic_Field_ID IN (
    SELECT Dynamic_Field_ID
    FROM CI_AM_Dynamic_Field
    WHERE Dynamic_Field_Group_ID = 238
)
GROUP BY tabDynValues.Record_ID
ORDER BY tabDynValues.Record_ID