Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql查询中将表的所有记录显示为列?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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

如何在sql查询中将表的所有记录显示为列?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个包含200条记录的表,所以我需要将所有200行显示为200列。在pivot in()部分中不可能写入所有200条记录,因为当我在表中插入201st记录时,它的列也应该显示出来 select * from Table_Name 返回200行 所以我需要在其他查询中显示200列 SELECT * FROM ( select RecordName from Table_Name ) AS T PIVOT (Max(RecordName) FOR MiscMasterName IN (Rec

我有一个包含200条记录的表,所以我需要将所有200行显示为200列。在pivot in()部分中不可能写入所有200条记录,因为当我在表中插入201st记录时,它的列也应该显示出来

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列 像wise一样,我需要200列,这样如果我添加201st记录
无论我在哪里执行查询,插入新记录后都会得到201列….

您需要进行动态透视。大概是这样的:

测试数据:

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
可能重复的