我有一个包含大约60列的表格,如果我在查询分析器中编写一个选择查询来获取它显示它的行,我必须滚动显示数据..
如何获得一行显示为60行,每行包含2列,一列用于列名,另一行用于值
例如,Select * from table where id = 1
默认情况下显示为
ID Col1 Col2 Col3 Col4 Col5 ...... Col60
1 v1 v2 v3 v4 v5 ...... v60
我希望它显示为
ID 1
Col1 v1
Col2 v2
Col3 v3
...
Col60 v60
答案 0 :(得分:3)
以下存储过程执行您需要的操作
CREATE PROCEDURE [dbo].[Rotat]
-- Add the parameters for the stored procedure here
@Where nvarchar(max),
@tableName nvarchar(max)
AS
BEGIN
Declare @SqlQuery nvarchar(max),@ColumnName nvarchar(255)
DECLARE @TempTable TABLE
(
ID int IDENTITY(1,1) ,
ColumnName nvarchar(255),
ColumnValue ntext
)
INSERT INTO @TempTable (ColumnName)
SELECT column_name
FROM information_schema.columns
WHERE table_name = @tableName
Declare @index int
Set @index = 1;
Declare @Count int
Select @Count = Count(ID) from @TempTable
declare @columnValue nvarchar(255)
declare @paraDef nvarchar(max)
declare @string nvarchar(max)
WHILE @index <= @Count
BEGIN
Select @ColumnName = ColumnName from @TempTable where id = @index
set @string ='select @ret= cast('+ @ColumnName + ' AS nvarchar(255) )
from '+@tableName+' WHERE ' + @Where
set @paraDef=N'@ret nvarchar(255) output'
EXECUTE sp_executesql @string, @paraDef,@ret=@ColumnValue output
UPDATE @TempTable
SET ColumnValue = @columnValue
WHERE ID =@index
Set @index = @index + 1
END
Select * from @TempTable
END
只需将其称为传递表名称和您将返回一行的条件,例如
EXEC [dbo].[Rotat]
@Where = 'UserID = 123456',
@tableName = 'Users'
答案 1 :(得分:0)
如果您想要一种非常快速的技术来查看转置的数据(正如您的问题似乎建议的那样),请尝试将结果网格中的输出复制并粘贴到Excel中,然后复制Excel数据并使用“选择性粘贴”转置输出