Простой поворот, но я не могу обойти его - пожалуйста помогите .. :-) - PullRequest
3 голосов
/ 29 мая 2019

Я пытаюсь сделать простой поворот в MS SSMS, но не могу понять.

Это мой набор данных:

Date        CallerANI      Skills               CallerDNIS
2019-05-27  27315391449    loc-SPD-CSR-OverFlow 47515070001
2019-05-27  27315391449    cc-Loc-Voice         Transfer

и утверждение:

SELECT [Date],
       CallerANI,
       [47515001101],
       [Transfer]
FROM (SELECT [Date], Skills, CallerANI, CallerDNIS FROM #TempDB) AS p
PIVOT (MAX(Skills)
       FOR CallerDNIS IN ([47515001101], [Transfer])) AS pvt;

Я хочу повернуть так, чтобы результат выглядел так:

Date            CallerANI              [47515070001]            [Transfer]
2019-05-27      273135391449           loc-SPD-CSR-OverFlow     cc-loc-Voice

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Приведенный ниже код помогает вам динамически Pivot N количество строк

DECLARE @DynamicCols VARCHAR(MAX);

CREATE TABLE #temp ([Date] DATE, [CallerANI] VARCHAR(MAX), [Skills] VARCHAR(MAX), [CallerDNIS] VARCHAR(MAX))

INSERT INTO #temp 
VALUES ('2019-05-27','27315391449','loc-SPD-CSR-OverFlow','47515070001'),
       ('2019-05-27','27315391449','cc-Loc-Voice','Transfer'),
       ('2019-05-27','27315391449','cc-Loc-Voice-abc','SoMe')

SELECT * FROM #temp

SELECT @DynamicCols = STUFF([Cols],1,1,'') FROM (
SELECT [Cols] = (SELECT ',' + QUOTENAME([CallerDNIS]) FROM #temp A
                   FOR XML PATH('') ) ) A;

EXEC ('
SELECT [Date], [CallerANI], ' + @DynamicCols+'
FROM #temp
PIVOT 
(
  MAX([Skills])
  FOR [CallerDNIS] in (' + @DynamicCols+')
) PIV');
3 голосов
/ 29 мая 2019

Лично я предпочитаю использовать Cross Tab вместо встроенной функции PIVOT. Я считаю, что гораздо проще в использовании:

SELECT [Date],
       CallerANI,
       MAX(CASE WHEN V.CallerDNIS = '47515070001' THEN Skills END) AS [47515070001],
       MAX(CASE WHEN V.CallerDNIS = 'Transfer' THEN Skills END) AS [Transfer]
FROM (VALUES (CONVERT(date,'20190527'),27315391449,'loc-SPD-CSR-OverFlow','47515070001'),
             (CONVERT(date,'20190527'),27315391449,'cc-Loc-Voice','Transfer')) V([Date],CallerANI,Skills,CallerDNIS)
GROUP BY [Date],
         CallerANI;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...