SQL Server:根据记录的值返回列名
发布时间:2021-02-27 23:04:29 所属栏目:MsSql教程 来源:网络整理
导读:基于以下示例表,我希望有人对以下内容提供快速建议/解决方案: |Field1 |Field2 |Field3 |Field4 ||-------|-------|-------|-------|| 1 | 0 | 0 | 1 | 我希望能够构建一个查询来返回列名,其值(基于单个记录)= 1.这样,不依赖于游标或临时表. 即我想要以下输
|
基于以下示例表,我希望有人对以下内容提供快速建议/解决方案: |Field1 |Field2 |Field3 |Field4 | |-------|-------|-------|-------| | 1 | 0 | 0 | 1 | 我希望能够构建一个查询来返回列名,其值(基于单个记录)= 1.这样,不依赖于游标或临时表. 即我想要以下输出: Field1 Field4 我一直在尝试对sys.columns(和sys.tables)进行各种连接,但到目前为止还没什么用. 解决方法您也可以使用Cross applySELECT Cname
FROM Tablename
CROSS apply (VALUES('Field1',Field1),('Field2',Field2),('Field3',Field3),('Field4',Field4)) ca (cname,data)
WHERE data = 1
要动态使用它. CREATE TABLE test
(
Field1 INT,Field2 INT,Field3 INT,Field4 INT
)
INSERT INTO test
VALUES ( 1,1 )
DECLARE @collist VARCHAR(max)='',@sql NVARCHAR(max)
SELECT @collist += '(''' + COLUMN_NAME + ''',' + COLUMN_NAME + '),'
FROM INFORMATION_SCHEMA.columns
WHERE TABLE_NAME = 'test'
AND COLUMN_NAME LIKE 'Field%'
AND TABLE_SCHEMA = 'dbo'
SELECT @collist = LEFT(@collist,Len(@collist) - 1)
SET @sql ='
SELECT Cname
FROM test
CROSS apply (VALUES' + @collist
+ ') ca (cname,data)
WHERE data = 1 '
EXEC Sp_executesql
@sql (编辑:天瑞地安资讯网_瑞安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 格式编号,以MS SQL Server中的百分比表示
- sql-server – 唯一索引,varchar列和(空格)空格的行为
- SQL 2000复制错误 – 订阅已标记为非活动状态,必须重新初始
- 数据库 – 如何在“菱形”关系系统中保持外键关系的一致性
- 用于数据库分片的MySQL代理替代方案
- sql – 复杂的字段“string – number – string”
- sql-server-2008 – SQL Server Express的任务调度程序
- sql-server – 管理工作室关闭时SQL Server性能不佳
- sql-server – SQL Server PDF全文搜索无法在FileStream PD
- HTML标记语言——引用
站长推荐
热点阅读

