首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在T中检索具有列名和相应值的值

在T中检索具有列名和相应值的值
EN

Stack Overflow用户
提问于 2015-11-17 13:34:18
回答 3查看 10.3K关注 0票数 0

我需要一个select语句,它将在第一个结果列中给出列名,在查询的下一个结果列中给出相应的值。图像指的是样本表。测试表

当我从测试表中检索ID 1的值时。它必须给出如下的结果集

结果集

我需要得到一个适当的结果,即使列名是不同的,列名中没有类似的前缀或后缀。即使表中的列被修改、添加/删除,我也不希望更改查询以获得结果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-17 13:45:02

代码语言:javascript
复制
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子句:

代码语言:javascript
复制
...
          where C.table_name = 'yourtable' and
                 C.column_name != 'ID'
...

但是所有的学分都必须给Server :列到行

票数 2
EN

Stack Overflow用户

发布于 2015-11-17 13:40:52

你可以把它打到主桌子上,但可能有点复杂。

最简单的方法就是硬编码列:

代码语言:javascript
复制
Select 'id1', val1 'STEP1', val2 'test2', val3 from [table]

请不要在列名中加空格。

票数 0
EN

Stack Overflow用户

发布于 2021-04-27 15:18:24

Server 2016 (13.x)及更高版本

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33758294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档