我正在尝试创建一些用于审核的报告,但是我有一个非常具体的问题。
大约有120列,每列都有一个特定的数字答案。我想返回列名和该列的行值。我知道我会得到很多结果,但这不是问题。
例如,我有:
1 |ColumnA | Value A
2 |ColumnA | Value A2
1 |ColumnB | Value B
2 |ColumnB | Value B2
但是我想要的是:
{{1}}
我尝试返回所有行,然后自行加入,但是并没有为我提供所需的输出。
答案 0 :(得分:1)
简单的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]
答案 1 :(得分:0)
以下查询应执行所需的操作-您需要对列名称进行自定义排序:
foreach
结果如下,
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
答案 2 :(得分:0)