Вы хотите получить список всех уникальных комбинаций County
, Site
, 'Номер сайта , and
Дата (month), and then you want
Инцидент and
Приоритет`, если они существуют.
Это двашаг вопрос.Сначала создайте список уникальных значений.Это внутренний подзапрос с GROUP BY
.
Затем выполните LEFT JOIN
назад к базовой таблице, но только там, где существует Incident
.Это последний из критериев JOIN
в предложении ON
.
В наборе результатов будут отображаться только данные Incident
там, где они существуют (избавление от пустых записей, которые вы хотите удалить), но создастпустая запись для каждой уникальной комбинации, в которой нет инцидентов.Операторы COALESCE
- это просто оформление витрин, чтобы сделать результаты красивыми.
Настройка данных:
DECLARE @t TABLE
(
County VARCHAR(10) NOT NULL
,Site VARCHAR(10) NOT NULL
,SiteName VARCHAR(10) NOT NULL
,Date VARCHAR(6) NOT NULL
,Incident VARCHAR(5) NULL
,Priority CHAR(2) NULL
);
INSERT @t
(
County
,Site
,SiteName
,Date
,Incident
,Priority
)
VALUES
('C1', 'S1', 'Sn1', 'Jan-19', 'INC3', '')
,('C1', 'S1', 'Sn1', 'Jan-19', '', '')
,('C1', 'S1', 'Sn1', 'Feb-19', 'INC2', '')
,('C1', 'S1', 'Sn1', 'Feb-19', 'INC1', '')
,('C1', 'S1', 'Sn1', 'Feb-19', '', '')
,('C1', 'S2', 'Sn2', 'Jan-19', '', '')
,('C1', 'S2', 'Sn2', 'Feb-19', '', '');
Запрос:
SELECT
list.County
,list.Site
,list.SiteName
,list.Date
,COALESCE(t1.Incident, '') AS Incident
,COALESCE(t1.Priority, '') AS Priority
FROM
(
SELECT
t.County
,t.Site
,t.SiteName
,t.Date
FROM
@t AS t
GROUP BY
t.County
,t.Site
,t.SiteName
,t.Date
) AS list
LEFT JOIN
@t AS t1
ON
t1.County = list.County
AND t1.Site = list.Site
AND t1.SiteName = list.SiteName
AND t1.Date = list.Date
AND t1.Incident <> '';
Результаты:
+--------+------+----------+--------+----------+----------+
| County | Site | SiteName | Date | Incident | Priority |
+--------+------+----------+--------+----------+----------+
| C1 | S1 | Sn1 | Feb-19 | INC2 | |
| C1 | S1 | Sn1 | Feb-19 | INC1 | |
| C1 | S1 | Sn1 | Jan-19 | INC3 | |
| C1 | S2 | Sn2 | Feb-19 | | |
| C1 | S2 | Sn2 | Jan-19 | | |
+--------+------+----------+--------+----------+----------+