2011-09-08 174 views
4

我有一個數據庫中的錶行,如下所示:一行基本SQL數據透視表?

Milk 
Eggs 
Butter 
Cheese 
Bread 

我想整個行轉動成一列顯示如下:使用

Milk Eggs Butter Cheese Bread 

我發現了很多的例子它具有多列和多行或基於選擇條件。我還沒有找到如何做一行的例子,我無法弄清楚。謝謝您的幫助!

編輯: 下面的方法很好,但有沒有辦法做到這一點,並將行值轉換爲列值?

回答

2

使用改性的ied版樣品here

DECLARE 
    @SQL varchar(MAX), 
    @ColumnList varchar(MAX) 

SELECT @ColumnList= 
     COALESCE(@ColumnList + ',','') + QUOTENAME(your_column_name) 
FROM 
(
     SELECT DISTINCT your_column_name 
     FROM your_table 
) T 


SET @SQL = ' 
WITH PivotData AS 
(
     SELECT your_column_name 
     FROM your_table 
) 
SELECT 
    ' + @ColumnList + ' 
FROM 
    PivotData 
PIVOT 
(
    MAX(your_column_name) 
    FOR your_column_name 
    IN (' + @ColumnList + ') 
) AS PivotResult' 

EXEC (@SQL) 

P.S.我不得不認真地質疑爲什麼我這樣做。 :)

+0

這很好。謝謝!我這樣做的原因是因爲我使用數據庫中的信息創建配置文件,而我只需要1行,但需要將其作爲列讀入。 – buzzzzjay

+1

很高興能幫到你。 –

7
select your_column_name+' ' from your_table for XML PATH ('') 

將返回

Milk Eggs Butter Cheese Bread 

這裏是整個腳本:

declare @Q as table 
(name varchar(50)) 

insert into @Q 
values 
('Milk'), 
('Eggs'), 
('Butter'), 
('Cheese'), 
('Bread') 

select name+' ' from @Q for XML PATH ('') 
+0

有沒有辦法做到這一點,並保留列中的名稱? – buzzzzjay

+0

@buzzzzjay你是什麼意思?結果顯示在一列 – Icarus

+0

你的意思是說,也許?選擇( 從@Q選擇名稱+''作爲XML路徑('') )作爲col_name – Icarus