我需要一个select语句,它将在第一个结果列中给出列名,在查询的下一个结果列中给出相应的值。图像指的是样本表。测试表
当我从测试表中检索ID 1的值时。它必须给出如下的结果集
结果集
我需要得到一个适当的结果,即使列名是不同的,列名中没有类似的前缀或后缀。即使表中的列被修改、添加/删除,我也不希望更改查询以获得结果。
发布于 2015-11-17 13:45:02
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot
= stuff((select ','+quotename(C.column_name)
from information_schema.columns as C
where C.table_name = 'yourtable' and
C.column_name like 'Val%'
for xml path('')), 1, 1, '')
set @query
= 'select id,
valname,
valvalue
from yourtable
unpivot
(
valvalue
for valname in ('+ @colsunpivot +')
) u'
exec sp_executesql @query;编辑:如果您只有第一列固定的话,倒转where子句:
...
where C.table_name = 'yourtable' and
C.column_name != 'ID'
...但是所有的学分都必须给Server :列到行
发布于 2015-11-17 13:40:52
你可以把它打到主桌子上,但可能有点复杂。
最简单的方法就是硬编码列:
Select 'id1', val1 'STEP1', val2 'test2', val3 from [table]请不要在列名中加空格。
发布于 2021-04-27 15:18:24
Server 2016 (13.x)及更高版本
declare @sql nvarchar(max);
set @sql = (select [YOUR_COL_NAMES] from [YOUR_TABLE_NAME] WHERE [CONDITION] for json auto , WITHOUT_ARRAY_WRAPPER);
select * from openjson(@sql)https://stackoverflow.com/questions/33758294
复制相似问题