sql >> Databáze >  >> RDS >> Sqlserver

sql server rozděluje hodnoty oddělené čárkami do sloupců

Dynamicky vyřešte tento problém, použijte DSQL k přidání dalších sloupců do výsledku.

--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

Výsledek je přiložen níže.



  1. Přidejte omezení, aby byl sloupec jedinečný pro skupinu řádků

  2. Jak nakonfigurovat replikaci clusteru do clusteru pro cluster Percona XtraDB nebo MariaDB Cluster

  3. odkazuje cizí klíč vždy na jedinečný klíč v jiné tabulce?

  4. Mám spouštěč autonomní, ale spustím se pouze jednou ve stejné relaci