Как написать запрос на столбец со списком разделенных категорий - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть таблица, как показано ниже:

CREATE TABLE [dbo].[UseCase]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [UseCase] [text] NOT NULL,
    [Comment] [nvarchar](40) NOT NULL,
    [Categories] [nvarchar](255) NULL
)

GO

INSERT INTO [dbo].[UseCase] ([UseCase], [Comment], [Categories])
VALUES ('This is use case 1', 'This is comment 1 for use case 1', 'Cat1|cat3|cat9')
INSERT INTO [dbo].[UseCase] ([UseCase], [Comment], [Categories])
VALUES ('This is use case 2', 'This is comment 1 for use case 2', 'Cat2|cat9')
INSERT INTO [dbo].[UseCase] ([UseCase], [Comment], [Categories])
VALUES ('This is use case 3', 'This is comment 1 for use case 3', 'Cat1|cat3')
INSERT INTO [dbo].[UseCase] ([UseCase], [Comment], [Categories])
VALUES ('This is use case 4', 'This is comment 1 for use case 4', 'Cat1|cat4')
INSERT INTO [dbo].[UseCase] ([UseCase], [Comment], [Categories])
VALUES ('This is use case 5', 'This is comment 1 for use case 5', 'Cat5')
INSERT INTO [dbo].[UseCase] ([UseCase], [Comment], [Categories])
VALUES ('This is use case 6', 'This is comment 1 for use case 6', 'Cat6|cat8')
INSERT INTO [dbo].[UseCase] ([UseCase], [Comment], [Categories])
VALUES ('This is use case 7', 'This is comment 1 for use case 7', 'Cat3|cat8')
INSERT INTO [dbo].[UseCase] ([UseCase], [Comment], [Categories])
VALUES ('This is use case 8', 'This is comment 1 for use case 8', 'Cat1|cat3|cat9')

Обратите внимание, что столбец Categories представляет собой строку с разделителем |.

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

Спасибо.

ОБНОВЛЕНИЕ:

За запрошенный комментарий Я добавляю следующее, как ожидается, результат:

Cat1 4
Cat2 1
Cat3 4
Cat4 1
Cat5 1
Cat6 1
Cat7 0
Cat8 2
Cat9 9

1 Ответ

2 голосов
/ 14 февраля 2020

Если я правильно понимаю ваш вопрос и вы используете SQL Server 2016+, следующий подход с использованием STRING_SPLIT() может помочь:

Заявление:

SELECT ss.[value] AS Category, COUNT(*) AS [Count]
FROM dbo.UseCase uc
CROSS APPLY STRING_SPLIT(uc.Categories, '|') ss
GROUP BY ss.[value]

Результат:

Category    Count
Cat1        4
Cat2        1
cat3        4
cat4        1
Cat5        1
Cat6        1
cat8        2
cat9        3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...