【问题标题】: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 以上

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-03
        • 2011-05-09
        • 2015-08-07
        相关资源
        最近更新 更多