Можно ли объединить строки одного конкретного столбца в несколько строк вместо одной в столбцы? - PullRequest
0 голосов
/ 10 апреля 2019

Я не могу развернуть строки в одну строку одного столбца и не могу задать имена столбцов псевдонимов

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

select * from (
select DET.*, DETF.ExtractTemplateId, DetF.FieldId, DEF.Field from DataExtractTemplate DET
    join DataExtractTemplateFields DETF
    on DET.Id = DETF.ExtractTemplateId
    join DataExtractFields DEF 
on DETF.FieldId = DEF.Id
    WHERE ClientId = 1) AS Src
PIVOT (
sum(Id)
for FieldId in ([1],[2],[6],[7])
) Pvt

Я получаю это:

Field           1        2       6      7
____________________________________________
First Name      1       NULL    NULL    NULL
Last Name       NULL    1       NULL    NULL
NPI             NULL    NULL    1       NULL
Phone Number    NULL    NULL    NULL    1

, но я хочу это

Field1       Field2     Field6  Field7
____________________________________
First Name   Last Name   NPI    Phone Number    

Снимок экрана ERD

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Не совсем легко понять, что вы пытаетесь сделать, но кажется, что использование перекрестного запроса может вам помочь.

SELECT SomeGroupingColumns, 
    MAX(CASE WHEN DetF.FieldId = 1 THEN DEF.Field END) AS Field1, 
    MAX(CASE WHEN DetF.FieldId = 2 THEN DEF.Field END) AS Field2, 
    MAX(CASE WHEN DetF.FieldId = 6 THEN DEF.Field END) AS Field6, 
    MAX(CASE WHEN DetF.FieldId = 7 THEN DEF.Field END) AS Field7
FROM DataExtractTemplate DET
JOIN DataExtractTemplateFields DETF ON DET.Id = DETF.ExtractTemplateId
JOIN DataExtractFields         DEF  ON DETF.FieldId = DEF.Id
WHERE ClientId = 1
GROUP BY SomeGroupingColumns;
0 голосов
/ 10 апреля 2019

Этот код сработал! Однако, с моим обновленным кодом, я получаю нули

SELECT DET.*,
    MAX(CASE WHEN (DetF.FieldId IS NOT NULL AND DETF.FieldID = 1) THEN DETF.FieldId END) AS Field,
    MAX(CASE WHEN DetF.FieldId IS NOT NULL AND DETF.FieldID = 2 THEN DETF.FieldId END) AS Field,
    MAX(CASE WHEN (DetF.FieldId IS NOT NULL AND DETF.FieldID = 3) THEN DETF.FieldId END) AS Field,
    MAX(CASE WHEN DetF.FieldId IS NOT NULL AND DETF.FieldID = 4 THEN DETF.FieldId END) AS Field,
    MAX(CASE WHEN DetF.FieldId IS NOT NULL AND DETF.FieldID = 5 THEN DETF.FieldId END) AS Field,
    MAX(CASE WHEN DetF.FieldId IS NOT NULL AND DETF.FieldID = 6 THEN DETF.FieldId END) AS Field,
    MAX(CASE WHEN DetF.FieldId IS NOT NULL AND DETF.FieldID = 7 THEN DETF.FieldId END) AS Field,
    MAX(CASE WHEN DetF.FieldId IS NOT NULL AND DETF.FieldID = 8 THEN DETF.FieldId END) AS Field

FROM DataExtractTemplate DET
JOIN DataExtractTemplateFields DETF ON DET.Id = DETF.ExtractTemplateId
JOIN DataExtractFields         DEF  ON DETF.FieldId = DEF.Id
WHERE ClientId = 1 and DETF.FieldId IS NOT NULL
GROUP BY DET.Id, DET.ClientId, DET.Name, DET.Description, DET.Delimiter, DET.id, DET.FieldQuotes, DET.ExportFormat, DET.DataSetType,
DET.DeliveryEmail, Det.DeliveryMethod, DET.RecurrenceDayOfYear, DET.RecurrenceDaysOfMonth, DET.RecurrenceEndType, DET.RecurrencePattern, DET.RecurrenceRangeEnd, DET.RecurrenceRangeEndAfter,
DET.RecurrenceRangeStart, Det.RecurrenceWeeks, DET.TimesRecurred, DET.Active;

Строка, показывающая нули

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