One Line Basic SQL Pivot?

时间:2011-09-08 17:45:17

标签: sql sql-server tsql sql-server-2008

我在数据库中有一个表,其行如下:

Milk
Eggs
Butter
Cheese
Bread

我想将整行旋转到一列,如下所示:

Milk Eggs Butter Cheese Bread

我找到了很多使用多列和行或基于选择条件的示例。我还没有找到任何如何做一行的例子,我无法弄明白。谢谢您的帮助!

编辑: 下面的方法工作得很好但有没有办法将行值转换为列值?

3 个答案:

答案 0 :(得分: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 ('')

答案 1 :(得分:2)

答案 2 :(得分:2)

使用示例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。我必须认真质疑为什么我这样做。 :)