Объединение записей даты и времени - PullRequest
0 голосов
/ 01 мая 2019

У меня есть две переменные Patient_FIN и Date_Time. Есть несколько дубликатов Patient_fin. Я хотел бы объединить каждый уникальный плавник пациента в одну строку, а также включить каждую переменную date_time.

 Example Data
 Financial Number     Requested 1 Date & Time
  1                2017-04-09 14:72:00.000
  1                2017-04-10 10:20:00.000
  2                2017-04-09 16:42:00.000
  3                2017-04-09 19:10:00.000
  4                2017-04-09 08:02:00.000
  4                2017-04-09 11:22:00.000

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

Financial Number     Requested 1 Date & Time1  Requested 1 Date & Time2
         1            2017-04-09 14:72:00.000      2017-04-10 10:20:00.00
         2            2017-04-09 16:42:00.000
         3            2017-04-09 19:10:00.000
         4            2017-04-09 08:02:00.000      2017-04-09 11:22:00.000

Я пытался использовать следующий код, но он помещал date_time в один столбец при наличии дублирующих FINS.

 SELECT [Financial Number], [Requested 1 Date & Time] =
    STUFF((SELECT DISTINCT '   '  +[Requested 1 Date & Time]
         FROM [ED_Dispo_Events_Using_Event_1 Triage Level 3] b 
         WHERE b.[Financial Number] = a.[Financial Number] 
         FOR XML PATH('')), 1, 2, '')
 FROM [ED_Dispo_Events_Using_Event_1 Triage Level 3] a
 Group BY [Financial Number]

Ответы [ 2 ]

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

Вы можете использовать следующее решение, используя PIVOT с ROW_NUMBER:

SELECT fin, [1], [2], [3], [4]
FROM (
    SELECT fin, date_col, ROW_NUMBER() OVER (PARTITION BY fin ORDER BY fin, date_col) AS rn
    FROM test
) st PIVOT (  
    MAX(date_col)
    FOR rn IN ([1], [2], [3], [4])  
) AS pt;

демо на dbfiddle.uk

Примечание: Это решение поддерживает финансовый номер с максимум четырьмя значениями даты.Если вы хотите поддерживать больше значений даты для финансового номера, вам нужно добавить больше столбцов ([5], [6], ...) к SELECT и PIVOT.

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

Предполагая, что максимальное количество строк равно 4 (и «время» 14:72 является типографской ошибкой), вы можете использовать «кросс-таблицу» для достижения этого:

WITH CTE AS(
    SELECT FinancialNumber,
           RequestedDateTime,
           ROW_NUMBER() OVER (PARTITION BY V.FinancialNumber ORDER BY RequestedDateTime) AS RN
    FROM (VALUES (1,CONVERT(datetime,'2017-04-09T14:22:00.000')),
                 (1,CONVERT(datetime,'2017-04-10T10:20:00.000')),
                 (2,CONVERT(datetime,'2017-04-09T16:42:00.000')),
                 (3,CONVERT(datetime,'2017-04-09T19:10:00.000')),
                 (4,CONVERT(datetime,'2017-04-09T08:02:00.000')),
                 (4,CONVERT(datetime,'2017-04-09T11:22:00.000'))) V(FinancialNumber,RequestedDateTime))
SELECT C.FinancialNumber,
       MAX(CASE RN WHEN 1 THEN RequestedDateTime END) AS RequestedDateTime1,
       MAX(CASE RN WHEN 2 THEN RequestedDateTime END) AS RequestedDateTime2,
       MAX(CASE RN WHEN 3 THEN RequestedDateTime END) AS RequestedDateTime3,
       MAX(CASE RN WHEN 4 THEN RequestedDateTime END) AS RequestedDateTime4
FROM CTE C
GROUP BY C.FinancialNumber;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...