如何在sql查询中显示表的所有记录作为列?

时间:2014-02-28 07:27:13

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

我有一个包含200条记录的表,因此我需要将所有200行显示为200列,因此无法在pivot IN()部分中写入所有200条记录,因为当我在表中插入第201条记录时,其列也应该是所示。

select * from Table_Name 

返回200行

所以我需要在其他查询中显示200列

SELECT * FROM
(
select RecordName from Table_Name
) AS T
PIVOT (Max(RecordName) FOR MiscMasterName IN (Record1,Record2)) AS T2

给出2列 像智者我需要200列,如果我添加201条记录 无论我在哪里执行查询,我都会在插入新记录后获得201列....

1 个答案:

答案 0 :(得分:1)

您需要进行动态调整。像这样:

测试数据:

CREATE TABLE Table_Name(MiscMasterName VARCHAR(200),RecordName VARCHAR(200))
INSERT INTO Table_Name
VALUES
    ('Record1','aValue'),
    ('Record2','SomeValue')

查找列

DECLARE @cols VARCHAR(MAX)
SET @cols=STUFF
(
    (
        SELECT
            ',' +QUOTENAME(MiscMasterName)
        FROM
            Table_Name
    FOR XML PATH('')
    )
,1,1,'')

声明并执行动态sql

DECLARE @query NVARCHAR(4000)=
N'SELECT 
* 
FROM
(
    SELECT 
        RecordName,
         MiscMasterName
    from 
        Table_Name
) AS T
PIVOT (Max(RecordName) FOR MiscMasterName IN ('+@cols+')) AS T2'
EXECUTE(@query)

自我清理

DROP TABLE Table_Name

<强>输出

Record1 Record2 
aValue  SomeValue