sql >> Databasteknik >  >> RDS >> Sqlserver

sql-servern delar upp kommaseparerade värden i kolumner

Lös detta problem dynamiskt, använd DSQL för att lägga till fler kolumner i resultatet.

--create split function
CREATE FUNCTION [dbo].[SO_Split]
(
    @List nvarchar(2000),
    @SplitOn nvarchar(5)
) 
RETURNS @RtnValue table
(

    Id int identity(1,1),
    Value nvarchar(100)
)
AS 
BEGIN
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select
    Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
    Set @List =Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
    Insert Into @RtnValue (Value)
    Select Value = ltrim(rtrim(@List))
    Return
END

--below is the dynamic solution for this problem
declare @sql nvarchar(3000) = 'select *'
declare @cnt int = 1
declare @rowNum int = (select max(a) from (select(select max(id) as id_max from dbo.so_split(mul_query,'*')) as a from #test) as b)

while(@cnt <= @rowNum)
begin
    set @sql = @sql + N', ISNULL((select value from dbo.so_split(mul_query,''*'') where id = '+cast(@cnt as nvarchar(5))+N'),''1'')'
    set @cnt = @cnt + 1
end

set @sql = @sql + N' from #test'

exec sp_executesql @sql

Resultatet bifogas nedan.



  1. Hur man implementerar Oracle count (distinct) över partition i Postgres

  2. PostgreSQL-fel:kunde inte ansluta till databasmall1:kunde inte ansluta till servern:Ingen sådan fil eller katalog

  3. Byta ut tabellpartitioner i SQL Server:En genomgång

  4. Gäller gränsen för det maximala antalet SQL-join-tabeller för hela frågan, eller räknas underfrågor separat?