select * from responses
带来:
2 | user_name | green,red
我是否可以更改查询以使其以下列格式显示?:
2 | user_name |green
2 | user_name |red
第三列中的CSV值数量因记录而异。
答案 0 :(得分:2)
我不确定要使用的mysql语法,如果这在mysql中甚至可能,但我知道它可能在SQL Server(tsql)中,因为我之前已经完成了(没有...我没有代码了)。
高级别流程。
基于逗号分割字符串的功能(应该可以使它更通用)。该函数应该返回一个表(如果可能的话,可以是变量,也可以在某处写入临时表,也可以返回临时表的名称)。
每个CSV项的临时表为1行
然后,您可以使用此临时表加入您的数据集,以获得您想要的内容。
这必须写在我想象的存储过程中。我敢打赌,这也是一种在递归CTE中实现它的方法。
我的TSQL分割功能的代码如下。你看我传入了一个join_value变量,它可能是你的用户名。
ALTER FUNCTION [common].[split_string](@String varchar(8000), @Delimiter char(1), @join_value bigint)
returns @temptable TABLE (items varchar(8000), join_value bigint)
as
begin
declare @idx int
declare @slice varchar(8000)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(items, join_value) values(rtrim(ltrim(@slice)), @join_value)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end