sql Query获取表的活动列名

时间:2014-04-23 12:27:16

标签: sql sql-server tsql sql-server-2005 sql-server-2008-r2

我正在使用sql server 2008.I有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的检查不会出现在结果集中吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你可以使用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