Вот мой вопрос - есть ли способ отредактировать мой код так, чтобы время RequestedDateTime1 из запроса 1 оставалось на одном уровне с соответствующим EventDisplay1 из запроса 1?
Вот как я пришел с этим вопросом.
У меня есть следующий код:
SELECT [Financial Number], [Depart Date & Time],
(Cast(Year([Arrival Date & Time]) as nvarchar) +'-'+ Cast (Month([Arrival Date & Time]) as nvarchar)) as Yr_Mon,
[Event 1 Display],
[Event 1 Personnel - Completed],
[Requested 1 Date & Time],
[Completed 1 Date & Time],
ROW_NUMBER() OVER (PARTITION BY [Financial Number] ORDER BY [Event 1 Display]) AS RB,
ROW_NUMBER() OVER (PARTITION BY [Financial Number] ORDER BY [Requested 1 Date & Time]) AS RN,
ROW_NUMBER() OVER (PARTITION by [Financial Number] ORDER BY [Completed 1 Date & Time]) AS RM,
ROW_NUMBER() OVER (PARTITION by [Financial Number] ORDER BY [Event 1 Personnel - Completed]) AS RO,
ROW_NUMBER() OVER (PARTITION by [Financial Number] ORDER BY [Arrival Date & Time]) as AD,
ROW_NUMBER() OVER (PARTITION by [Financial Number] ORDER BY [Depart Date & Time]) as DT
FROM [ED_Dispo_Events_Using_Event_1 Triage Level 3] AS ED
, который дает результаты, которые выглядят следующим образом (это сокращенно из-за нехватки места):
[Financial Number] [Depart Date & Time] .. EventDisplay1 RequestedDateTime1
1 2018-01-01 10:19:11 EP Exam 2018-01-01 11:19
1 2018-01-01 10:19:11 Discharge 2018-01-01 12:20
2 2018-01-01 13:49:11 EP Exam 2018-01-01 12:20
Затем я добавляю запрос к запросу данных 1:
Select [Financial Number],
MIN(CASE DT WHEN 1 THEN [Depart Date & Time] END) AS [Depart Date &
Time1],
MIN(CASE RB WHEN 1 THEN [Event 1 Display] END) AS EventDisplay1,
MIN(CASE RB WHEN 2 THEN [Event 1 Display] END) AS EventDisplay2,
MIN(CASE RB WHEN 3 THEN [Event 1 Display] END) AS EventDisplay3,
MIN(CASE RO WHEN 1 THEN [Event 1 Personnel - Completed] END) AS
EventPersonnelCompleted1,
MIN(CASE RO WHEN 2 THEN [Event 1 Personnel - Completed] END) AS
EventPersonnelCompleted2,
MIN(CASE RO WHEN 3 THEN [Event 1 Personnel - Completed] END) AS
EventPersonnelCompleted3,
MIN(CASE RN WHEN 1 THEN [Requested 1 Date & Time] END) AS RequestedDateTime1,
MIN(CASE RN WHEN 2 THEN [Requested 1 Date & Time] END) AS RequestedDateTime2,
MIN(CASE RN WHEN 3 THEN [Requested 1 Date & Time] END) AS RequestedDateTime3,
MIN(CASE RM WHEN 1 THEN [Completed 1 Date & Time] END) AS CompletedDateTime1,
MIN(CASE RM WHEN 2 THEN [Completed 1 Date & Time] END) AS CompletedDateTime2,
MIN(CASE RM WHEN 3 THEN [Completed 1 Date & Time] END) AS CompletedDateTime3,
FROM
(
SELECT [Financial Number], [Depart Date & Time],
(Cast(Year([Arrival Date & Time]) as nvarchar) +'-'+ Cast (Month([Arrival Date & Time]) as nvarchar)) as Yr_Mon,
[Event 1 Display],
[Event 1 Personnel - Completed],
[Requested 1 Date & Time],
[Completed 1 Date & Time],
ROW_NUMBER() OVER (PARTITION BY [Financial Number] ORDER BY [Event 1 Display]) AS RB,
ROW_NUMBER() OVER (PARTITION BY [Financial Number] ORDER BY [Requested 1 Date & Time]) AS RN,
ROW_NUMBER() OVER (PARTITION by [Financial Number] ORDER BY [Completed 1 Date & Time]) AS RM,
ROW_NUMBER() OVER (PARTITION by [Financial Number] ORDER BY [Event 1 Personnel - Completed]) AS RO,
ROW_NUMBER() OVER (PARTITION by [Financial Number] ORDER BY [Arrival Date & Time]) as AD,
ROW_NUMBER() OVER (PARTITION by [Financial Number] ORDER BY [Depart Date & Time]) as DT
FROM [ED_Dispo_Events_Using_Event_1 Triage Level 3] AS ED
)sub group by [Financial Number]
Этот запрос дает результаты, объединяющие каждую строку, поэтому каждая строка представляет собой один уникальный финансовый номер; однако при этом нарушается выравнивание переменной RequestedDateTime1 с переменной EventDisplay1. Например, используя приведенные выше примеры данных, RequestedDateTime1 от 2018-01-01 12:20, который был выровнен с DISCHARGE, теперь выровнен с EP EXAM. Я полагаю, что это потому, что код упорядочивает вновь созданные переменные EventDisplay1, EventDisplay2, EventDisplay3 в алфавитном порядке.
Пример результатов, которые являются неверными, поскольку Discharge RequestedDateTime1 соответствует EP RequestedDateTime1:
[Financial Number] [Depart Date & Time] EventDisplay1 EventDisplay2 RequestedDateTime1 RequestedDateTime2
1 2018-01-01 10:19:11 Discharge EP Exam 2018-01-01 11:19 2018-01-01 12:20
Короче говоря, есть ли способ отредактировать мой код так, чтобы время RequestedDateTime1 из запроса 1 оставалось на одном уровне с соответствующим EventDisplay1 из запроса 1?
Желаемые результаты:
[Financial Number] [Depart Date & Time] EventDisplay1 EventDisplay2 RequestedDateTime1 RequestedDateTime2
1 2018-01-01 10:19:11 EP Exam Discharge 2018-01-01 11:19 2018-01-01 12:20