SQL行轉列統計問題

暖楓無敵發表於2011-08-13

今天在CSDN上看見有人提出如下的SQL統計問題,於是幫他寫了一個SQL語句。

問題如下:


表結構如下

要實現的效果如下:


這個涉及行專列問題,SQL語句如下:

insert into product values('13303','茶杯','藍色','a',20);
insert into product values('13303','茶杯','藍色','b',10);
insert into product values('13303','茶杯','藍色','c',30);
insert into product values('13303','茶杯','灰色','a',10);
insert into product values('13304','水杯','白色','b',20);


declare @sql varchar(8000)
set @sql = 'select [id],[name],[color] '
select @sql = @sql + ' , max(case [size] when ''' + [size] + ''' then number else 0 end) [' + [size] + ']'
from (select distinct [size] from product) as a
set @sql = @sql + ' from product group by [id],[name],[color]'
exec(@sql)

最終顯示效果如下圖:


SQL行列轉換+合併操作,原帖地址:http://bbs.csdn.net/topics/390348963

Create table 資料  --建立表
(
    ID Int IDENTITY(1,1)  not null,  
    編號  Varchar(50),   
    明細 Varchar(50),    
    Primary Key(ID)        
);
 
Insert Into 資料
Select 1,'a' Union all
Select 1,'b' Union all
Select 1,'c' Union all
Select 2,'a' Union all
Select 2,'b' Union all
Select 2,'d'Union all
Select 3,'a'Union all
Select 3,'b'
 
--建立自定義函式
Create Function CSDN
(
   @mx Varchar(50)
)
Returns Varchar(8000)
as 
Begin
Declare @str Varchar(8000)
Set @str = ''
Select @str = @str + cast(明細 as Varchar(50))  + ',' from 資料 Where 編號 = @mx 
Set @str = SubString(@str,1,len(@str)-1)
Return(@str)
End
 
--呼叫自定義函式得到結果
Select Distinct 編號,dbo.CSDN(編號) as 明細From 資料;





相關文章