2011-09-08 110 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