Используйте CASE WHEN, чтобы перечислить несколько дат в одной строке - PullRequest
0 голосов
/ 28 февраля 2020

Я делаю запрос с датами будущих слушаний. Можно ли перечислить 2-ю дату слушания в той же строке, что и слушание 1 - вместо того, чтобы перечислить строки 2-го случая.

Вот пример:

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

Вот мой код для этого раздела.

SELECT * 
INTO #EventStatusInfoFinal 
FROM ( 
SELECT DISTINCT ESI1.*,
(CASE WHEN ESI1.NextHearingDate = ESI2.NextHearingDate THEN ESI1.NextHearingDate
    ELSE ESI1.NextHearingDate
END) AS 'NextHearingDate1',
(CASE WHEN ESI1.NextHearingDate != ESI2.NextHearingDate THEN ESI2.NextHearingDate
    ELSE ''
END) AS 'NextHearingDate2',
RANK () OVER (PARTITION BY ESI1.CaseID ORDER BY ESI1.NextHearingDate ASC) AS RANK3
FROM #EventStatusInfo ESI1
INNER JOIN #EventStatusInfo ESI2 ON ESI2.CaseID = ESI1.CaseID
) AS X
WHERE X.RANK3 = 1

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Это один простой способ удалить ненужные строки:

SELECT *
FROM (
SELECT DISTINCT ESI1.*,
(CASE WHEN ESI1.NextHearingDate = ESI2.NextHearingDate THEN ESI1.NextHearingDate
ELSE ESI1.NextHearingDate
END) AS 'NextHearingDate1',
(CASE WHEN ESI1.NextHearingDate != ESI2.NextHearingDate THEN ESI2.NextHearingDate
ELSE NULL
END) AS 'NextHearingDate2',
RANK () OVER (PARTITION BY ESI1.CaseID ORDER BY ESI1.NextHearingDate ASC) AS RANK3
FROM EventStatusInfo ESI1
INNER JOIN EventStatusInfo ESI2 ON ESI2.CaseID = ESI1.CaseID
) AS X
WHERE X.RANK3 = 1
and NextHearingDate2 is not null --this is the part I added. 

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

0 голосов
/ 28 февраля 2020

Вы можете попробовать использовать агрегацию -

SELECT * 
INTO #EventStatusInfoFinal 
FROM ( 
SELECT DISTINCT ESI1.CaseID ,
max(CASE WHEN ESI1.NextHearingDate = ESI2.NextHearingDate THEN ESI1.NextHearingDate
    ELSE ESI1.NextHearingDate
END) AS 'NextHearingDate1',
max(CASE WHEN ESI1.NextHearingDate != ESI2.NextHearingDate THEN ESI2.NextHearingDate
    ELSE null
END) AS 'NextHearingDate2',
RANK () OVER (PARTITION BY ESI1.CaseID ORDER BY ESI1.NextHearingDate ASC) AS RANK3
FROM #EventStatusInfo ESI1
INNER JOIN #EventStatusInfo ESI2 ON ESI2.CaseID = ESI1.CaseID
group by ESI1.CaseID
) AS X
WHERE X.RANK3 = 1
...