Я сформировал набор результатов с 6 различными столбцами даты, как показано ниже.
Я пытаюсь получить набор результатов, как этот.Я пытался с приведенным ниже кодом, но он не работал идеально.
Следующие вещи должны быть рассмотрены для окончательного набора результатов.
Если все 6 дат одинаковы для конкретной модели, мы можем показать ее в одной строке.
Даты должны быть в отсортированном порядке.скажем, для строки № 2 у нас есть три даты.поэтому мы должны отобразить его в трех строках под соответствующим столбцом, учитывая, что окончательный полный набор результатов будет отсортирован.
Вот мой код.
DECLARE @Input table (year int,
fmy char(2),
model char(6),
d1 date,
d2 date,
d3 date,
d4 date,
d5 date,
d6 date);
INSERT INTO @Input
SELECT T.year,
T.fmy,
T.model,
CONVERT(date,T.d1,101),
CONVERT(date,T.d2,101),
CONVERT(date,T.d3,101),
CONVERT(date,T.d4,101),
CONVERT(date,T.d5,101),
CONVERT(date,T.d6,101)
FROM (VALUES (2019, 'DD', 'FCRAC2', '1/1/2018', '1/1/2018', '1/1/2018', '1/1/2018', '1/1/2018', '1/1/2018'),
(2019, 'DD', 'FCRAC2', '07/10/2018', NULL, '1/8/2019', '3/1/2018', NULL, NULL),
(2019, 'DD', 'FCRAC2', '9/5/2018', NULL, NULL, '7/3/2018', NULL, NULL),
(2019, 'DD', 'FCRAC2', '1/8/2019', NULL, NULL, '1/8/2019', NULL, NULL)--,
--(2019, 'DD', 'FCRAC2', '9/5/2018', NULL, NULL, NULL, NULL, NULL)
) AS T (year, fmy, model, d1, d2, d3, d4, d5, d6);
SELECT * FROM @Input;
WITH Dates AS(
SELECT DISTINCT D
FROM @Input
CROSS APPLY (VALUES(d1),(d2),(d3),(d4),(d5),(d6)) V(D))
select * from Dates
;WITH Dates AS(
SELECT DISTINCT D
FROM @Input
CROSS APPLY (VALUES(d1),(d2),(d3),(d4),(d5),(d6)) V(D))
SELECT I.[year],
I.fmy,
I.model,
CASE D.D WHEN I.d1 THEN I.d1 END AS d1,
CASE D.D WHEN I.d2 THEN I.d2 END AS d2,
CASE D.D WHEN I.d3 THEN I.d3 END AS d3,
CASE D.D WHEN I.d4 THEN I.d4 END AS d4,
CASE D.D WHEN I.d5 THEN I.d5 END AS d5,
CASE D.D WHEN I.d6 THEN I.d6 END AS d6
FROM Dates D
LEFT JOIN @Input I ON (D.D = I.D1 or D.D =I.D2 or D.D =I.D3 or D.D =I.D4 or D.D = I.D5 or D.D =I.D6)
WHERE D.D is not null
ORDER BY D.D;