2010-08-31 93 views
2

select * from responses帶來:在列轉換CSV記錄多行

2 | user_name | green,red 

我可以更改查詢,以便它帶來它的格式如下?:

2 | user_name |green 
2 | user_name |red 

數量在第三CSV值列從記錄到記錄各不相同。

回答

2

我不確定使用的mysql語法,如果這甚至可能在mysql中,但我知道它可能在SQL Server(tsql)中,因爲我以前做過(不...我沒有代碼)。

高級過程。

  1. 基於逗號分割字符串的函數(應該使其更通用)。該函數應該返回一個表(如果可能的話,或者寫入某個臨時表,並且可能返回臨時表的名稱)。

  2. 的臨時表將每個CSV項目

  3. 1排然後你就可以加入你的數據與此臨時表設置爲得到你想要的。

  4. 這將不得不寫在我想象的存儲過程中。我敢打賭,這也是一種在遞歸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