【问题标题】:sql Query to get active Columnnames of tablesql 查询以获取表的活动列名
【发布时间】:2014-06-08 06:50:21
【问题描述】:
我正在使用 sql server 2008。我有 2 个表 table1 包含,
id name chk1 chk2 chk3
1 aaa 0 0 1
2 bbb 2 2 1
3 ccc 1 0 2
table2 包含
chk_code chk_name flag
CH1 chk1 1
CH2 chk2 0
CH3 chk3 1
我想得到这样的结果集,
Column_Name
id
name
chk1
chk3
标志值为 0 的检查没有出现在结果集中?
【问题讨论】:
标签:
sql
sql-server
tsql
sql-server-2005
sql-server-2008-r2
【解决方案1】:
使用这个查询:
with x as (
select *
from sys.columns c
left join table2 t2 on c.name = t2.chk_name
where c.object_id = object_id('table1')
)
select name
from x
where flag = 1 or flag is null
【解决方案2】:
您可以使用 unpivot 来实现...但是 unpivot 的问题是所有 unpivot 列名必须是相同大小的相同数据类型...如果没问题,那么您可以像这样使用 unpivot
SELECT Column_Name
FROM (SELECT *
FROM
(SELECT TOP 1 * FROM
tab1) p
UNPIVOT
(tab1 FOR Column_Name IN
([id], [name], [chk1], [chk2], [chk3])
)AS unpvt) AS vv WHERE Column_Name NOT IN
(SELECT chk_name FROM tab2 WHERE flag = 0)
SQLFiddle 以上