Pivot - как написать код, если в строке есть Null - PullRequest
0 голосов
/ 17 мая 2019

Мои данные ниже

id  DENM                                     DD
1   Point 5-Point 4;  (Sill22);              902
1   Point 3-Point 5;  (Right Jammy);         2014
1   Point 3-Point 5;  (Right Jammy);         2004
1   Point 2-Point 3;  (Head11);              902
1   Point 2-Point 3;  (Head11);              842
1   Point 4-Point 2;  (Left Jammy);          2014
1   Point 4-Point 2;  (Left Jammy);          2004
2   Point 4-Point 2;  (Left Jammy);          885
2   Point 4-Point 2;  (Left Jammy);          800

Я присоединяю приведенную выше таблицу к другой таблице по идентификатору. Но прежде чем соединить данные с данными, я хочу, чтобы данные были такими, как показано ниже

1    902    2014    2004    902     842     2014    2004
2    885    800     NULL    NULL    NULL    NULL    NULL

Как написать запрос в SQL

1 Ответ

1 голос
/ 17 мая 2019

все сводки в T-SQL одинаковы;

  • найти значения столбца, которые вы хотите колонизировать
  • найдите столбец, которому вы назначаете преобразование (сумма, макс., мин и т. д.)
  • остальное подливка

В вашем случае у вас есть стол

select
 id,
 DENM,
 DD
from [table_name]

, который вы хотите присоединить к другому столу.:

select
 id,
 DENM,
 DD,
 t2.[fields]
from [table_name] t1 with (nolock)
join [second_table] t2 with (nolock)
 on t1.id = t2.id

и поместите в него сводную точку:

select
 id,
 [field list]
from
(
 select
  id,
  DENM,
  DD,
  t2.[fields]
 from [table_name] t1 with (nolock)
 join [second_table] t2 with (nolock)
  on t1.id = t2.id
) data
pivot
(
 sum(value field)
 for [DD] in (@collist)
) as pvtData

Я рекомендую создать свой [список полей] из предыдущего запроса, который создает хороший чистый заполненный список значений.Примерно так:

    DECLARE @collist nvarchar(max);
    SELECT @collist = STUFF(
    (
        SELECT 
            distinct ',' + quotename(Variable)  
        from
            [table_name] t1
        group by 
            Variable
                    FOR XML PATH(''), root('MyString'), type).value('/MyString[1]','varchar(max)'), 1, 1, '');

Для этого потребуется использовать динамический SQL и завершить сохраненный процесс с помощью

exec sp_executesql @queryText
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...