Sql 是否可以将所有列作为行返回,并在第二列中返回它们的值?
我试图创建一些用于审计的报告,但我有一个非常具体的问题 大约有120列,每列都有一个特定的数字答案。我想返回列名和该列行的值。我知道我会得到很多结果,但这不是问题 例如,我有:Sql 是否可以将所有列作为行返回,并在第二列中返回它们的值?,sql,sql-server,Sql,Sql Server,我试图创建一些用于审计的报告,但我有一个非常具体的问题 大约有120列,每列都有一个特定的数字答案。我想返回列名和该列行的值。我知道我会得到很多结果,但这不是问题 例如,我有: KEY |ColumnA | ColumnB 1 |Value A | ValueB 2 |ValueA2 | ValueB2 但我想要的是: 1 |ColumnA | Value A 2 |ColumnA | Value A2 1 |ColumnB | Value B 2 |Colum
KEY |ColumnA | ColumnB
1 |Value A | ValueB
2 |ValueA2 | ValueB2
但我想要的是:
1 |ColumnA | Value A
2 |ColumnA | Value A2
1 |ColumnB | Value B
2 |ColumnB | Value B2
我已尝试返回所有行,然后自行连接,但它没有提供我所需的输出。以下查询应满足您的要求-您需要对列名进行自定义排序:
CREATE TABLE #temp (ColumnA VARCHAR(20), ColumnB VARCHAR(20))
INSERT INTO #temp VALUES ('Value A','Value B'),('Value A2','Value B2')
SELECT t.Col, t.Val
FROM (SELECT *,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) RNO FROM #temp t) tmp
CROSS APPLY (VALUES (tmp.ColumnA,'ColumnA',tmp.RNO),(tmp.ColumnB,'ColumnB',tmp.RNO)) AS T(Val,Col,sort)
ORDER BY T.Col, Sort
结果如下:
Col Val
ColumnA Value A
ColumnA Value A2
ColumnB Value B
ColumnB Value B2
它很简单…如果你知道列名,你可以使用一个简单的联合
SELECT * FROM tblAuditing
SELECT 'ColumnA' AS ColumnA,'ColumnB' AS ColumnA UNION
SELECT ColumnA AS ColumnA,ColumnB AS ColumnA FROM tblAuditing
简单的
unpivot
将完成这项工作:)
谢谢我需要声明我想要的每一列吗?当前有一个键绑定行,我需要保留它。我已经更新了我的示例。很抱歉你是最棒的!谢谢
declare @tbl table ([Key] int, ColumnA varchar(15), ColumnB varchar(15));
insert into @tbl values
(1, 'Value A', 'ValueB'),
(2, 'ValueA2', 'ValueB2');
select [key], [column], [value] from
(select * from @tbl) p
unpivot
([value] for [column] in (ColumnA, ColumnB)) u
order by [column]