将多个定界字符串中的所有值编译到一个表中

问题描述 投票:0回答:1

我正在像这样的表格中收集对在线调查表的回复:

CREATE TABLE [Survey]
(
    ID int IDENTITY(1,1) NOT NULL,
    UserName varchar(50) NOT NULL,
    Responses varchar(max) NOT NULL,
    Taken datetime NOT NULL
)

[当用户单击提交按钮时,一个过程将捕获所有单击的复选框,并将它们的名称连接成一个定界的字符串,并将其与其他字段一起填充到表中。本质上与:

INSERT INTO [Survey] (UserName, Responses, Taken) VALUES ('John', 'chkSize', GetDate())
INSERT INTO [Survey] (UserName, Responses, Taken) VALUES ('Mary', 'chkSquare;chkSoft', GetDate())
INSERT INTO [Survey] (UserName, Responses, Taken) VALUES ('Steve', 'chkSize;chkYellow;chkRound', GetDate())
INSERT INTO [Survey] (UserName, Responses, Taken) VALUES ('April', 'chkRound;chkStacked;chkFiltered;chkBrown', GetDate())

是否有一种方法可以轻松遍历整个表的所有“响应”,找到所有可能的值,然后将它们作为唯一列表返回到它们自己的表中?即:

chkBrown
chkFiltered
chkRound
chkSize
chkSoft
chkSquare
chkStacked
chkYellow
sql sql-server split delimiter
1个回答
1
投票

您可以使用string_split()执行您想做的事情:

select s.value, count(*)
from survey su cross apply
     string_split(su.responses, ';') s
group by s.value;

Here是db <>小提琴。

可以这样做的事实并不意味着您应该。您应该将响应存储在separate表中,每个响应一行。

© www.soinside.com 2019 - 2024. All rights reserved.