我需要一个select语句,它将在第一个结果列中给出列名,并在Query的下一个结果列中给出相应的值。图像是指样本表。 Test Table
当我从测试表中检索ID 1的值时。它必须给出像
这样的结果集我需要得到一个合适的结果,即使列名不同,列名中也没有类似的前缀或后缀。即使表中的列被修改意味着添加/删除,我也不想更改查询以获得结果。
答案 0 :(得分:1)
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'
...
但必须给予所有学分 SSQL Server : Columns to Rows
答案 1 :(得分:0)
你可以点击主表但可能有点复杂。
最简单的方法就是对列进行硬编码:
Select 'id1', val1 'STEP1', val2 'test2', val3 from [table]
请不要在列名中加上空格。
答案 2 :(得分:0)
SQL 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)