如何获取表中列名的列表,其中这些列的值不为NULL

时间:2014-01-08 20:25:36

标签: mysql sql

以下是我如何获取表

的列名列表
SELECT t.name AS table_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%tkrt%' and t.name = 'timerate'

所以我得到一个清单:

table_name  colunm_name
timerate    tkrt01
timerate    tkrt02
...
timerate    tkrt50

现在在基于tkinit和tkeffdate的实际表中,我得到了这个

select * from timerate where tkinit = '0005' and tkeffdate = 
(select MAX(tkeffdate) from timerate where tkinit = '0005')

tkinit    tkeffdate                tkrt01   tkrt02  ... tkrt22  ... tkrt50  
0005      2014-01-01 00:00:00.000   440.00  NULL    ... 400.00  ... NULL    

所以返回有一些tkrt01,tkrt22的值...而某些tkrt是NULL

我在想是否使用第一个查询只返回一个colunm名称列表(tkrt01 ... tkrt50),如果有某种方法可以使用另一个查询来查看使用循环中的变量检查是否每列如果它为null则不返回它。 基本上我想要一个包含值的列名列表,所以我的最终结果是

column_name
tkrt01
tkrt22

因为那些只有两列中包含值。

对于每个人来说情况并非如此,因为我有两个项目来过滤tkinit和tkeffdate

每个id(tkint)都有不同的max(tkeffdate)。我已经看过为XML路径和For Each看看,但是无法找出从sys.tables连接sys.columns列出colunm名称的最佳方法,其中在特定表(t.name)中各自的列(基于两个过滤器)中有数据

0 个答案:

没有答案