У меня есть вопрос, могу ли я избежать использования курсора.
У меня есть таблица с тысячами записей, подобная этой:
Date | Name | StateData |
-----------+-------+-----------+
22-10-2019 | Tom | OPENED |
22-10-2019 | David | NULL |
22-10-2019 | Tom | NULL |
22-10-2019 | Brand | CLOSED |
22-10-2019 | Tom | NULL |
23-10-2019 | Brand | NULL |
22-10-2019 | Brand | OPENED |
22-10-2019 | Tom | OPENED |
22-10-2019 | Brand | OPENED |
22-10-2019 | Tom | CLOSED |
22-10-2019 | Brand | CLOSED |
Чего бы я хотел достичьэто результат, где я могу видеть каждое имя только в 1 строке с подсчетом, сколько раз у них было какое состояние "StateData".
Date | Name | OPENED | CLOSED | UNUSED |
-----------+------+--------+--------+--------+
22-10-2019 | Tom | 2 | 1 | 2 |
22-10-2019 | David| 0 | 0 | 1 |
22-10-2019 | Brand| 2 | 2 | 1 |
Я пробовал подобный выбор
SELECT DISTINCT d.Name, d.[opened], d.[closed], d.[unused], StateData
FROM [dbo].[StateData] d
INNER JOIN (
SELECT DISTINCT Name, [opened], [closed], [unused]
FROM [dbo].[StateData]
GROUP BY Name, [opened], [closed], [unused]
) dp
ON dp.Name = d.Name
;
Я знаю, что это можно сделать с помощью создания хранимой процедуры с помощью CURSOR, но я не настолько опытен с курсором.