ID Date1 T1 Date2 T2 Date3 T3 Date4 T4
1 DT11 Y ----------NULL-----------------------
2 DT11 N DT22 Y ----------NULL----------
3 DT31 N DT32 Y DT33 Y --NULL-----
4 ----NULL--- DT42 Y ---NULL--- DT44 Y
5 DT51 Y ---NULL-- DT53 Y --NULL-----
У меня есть таблица Table1 с вышеуказанной структурой.Построить запрос T-SQL по следующему требованию
Требования:
- Проверьте, какой из (Т1 - Т5) имеет «Y» в нем
- Если несколько «Y», сравнить даты, чтобы получить самую последнюю дату
- Задайте значение в новом поле с именем или частью имени поля даты с самой последней датой.
Итак, о/р должен быть
ID Most-recent-Date-Flag
---------------------------------------------------
1 "Date1 or T1" -> Since all others are null
2 "Date2 or T2" -> T2 has 'Y'
3 "Date3 or T3" -> one 'N' and multiple 'Y', DT33 is most recent
4 "Date4 or T4" -> multiple 'Y', DT44 is most recent
5 "Date5 or T5" -> multiple 'Y', DT53 is most recent
мне удалось создать запрос для сравнения дат. Она заключается в следующем:
SELECT [ID]
, MAX(UNPIVOT_DATE) AS MOST_RECENT_DATE
FROM
(
SELECT
[ID]
,[Date1]
,[Date2]
,[Date3]
,[Date4]
FROM TABLE1
)SRC_TABLE
UNPIVOT
(
UNPIVOT_DATE
FOR DATES IN
(
[Date1]
,[Date2]
,[Date3]
,[Date4]
)
)UNPIVOT_TABLE
GROUP BY [ID]
Я застрял в точке, где я проверить на «Y» в (T1-T4) полей и получить имя столбца самой последней даты после сравнения.
Надеюсь, это объяснение поможет!
08/04/2013
Спасибо большое @MarcinJuraszek. Оно работает!! В любом случае, я могу передать имя столбца поля (T1-T4) тоже? Я попробовал следующее, и это не сработало.
SELECT t.[ID]
,MAX(t.Date) as MOST_RECENT_DATE
--,t.Column_Name
FROM
(
SELECT [ID]
,[Date1] as Date
,[T1] as T
-- ,COL_NAME(OBJECT_ID('Table1'), 2) AS Column_Name
FROM Table1
UNION ALL
SELECT [ID]
,[Date2] as Date
,[T2] as T
-- ,COL_NAME(OBJECT_ID('Table1'), 4) AS Column_Name
FROM Table1
UNION ALL
SELECT [ID]
,[Date3] as Date
,[T3] as T
-- ,COL_NAME(OBJECT_ID('Table1'), 6) AS Column_Name
FROM Table1
UNION ALL
SELECT [ID]
,[Date4] as Date
,[T4] as T
-- ,COL_NAME(OBJECT_ID('Table1'), 8) AS Column_Name
FROM Table1
) t
WHERE t.T = 'Y'
GROUP BY t.[ID]
--, t.Column_Name
ORDER by [ID]
Добро пожаловать в StackOverflow: если вы отправляете код, XML или образцы данных, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора для красивого формата и синтаксиса выделите это! –
спасибо marc_s! Я первый таймер здесь ... не знал, как это сделать! :) – user2243262
Это полезно с вопросами о StackOverflow, чтобы показать свою линию рассуждений и, в частности, где вы застряли. Покажите нам, что вы сделали, и мы будем рады помочь, но попросить других написать код для вас нечистый –