2015-10-16 62 views
0

好吧,我一直在弄错这个问题,并且现在用了很多不同的方法。希望有人能帮忙。在T-SQL查询中使用WHERE和HAVING的问题

我想查询INFORMATION_SCHEMA.Columns发现:

  1. 仅包含2列

  2. 所有表至于那些2列名两端与 “ID”

这是我的查询:

select table_name, count(column_name) as [Count] 
from information_schema.columns 
where column_name like '%id' 
group by table_name 
having count(column_name) = 2 

但是,它没有返回正确的结果。你可以在你自己的数据库上运行它(我确信很多数据库都有表格,其列名以ID结尾)并亲自查看。

有什么建议吗?

+0

什么是'不返回正确的结果? –

+0

感谢您的帮助! –

回答

1

你应该做的HAVING子句中的LIKE比较:

SELECT 
    table_name 
FROM INFORMATION_SCHEMA.COLUMNS 
GROUP BY table_name 
HAVING 
    COUNT(CASE WHEN column_name LIKE '%id' THEN column_name END) = 2 
    AND count(CASE WHEN column_name NOT LIKE '%id' THEN column_name END) = 0 

这样,只有两列的表格,其中所述列应在'id'结束,将被退回。

+1

谢谢!这说得通。 –

0

您不能选择具有某些列的聚合函数,而这些列在group by子句中没有。您可以在SQL 2005+中使用OVER()子句(窗口函数)。试试这个:

SELECT * FROM(
    SELECT TABLE_NAME, COUNT(COLUMN_NAME) OVER() AS [Count] 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_catalog = 'Database_name' --Database name 
     AND COLUMN_NAME LIKE '%id') A 
WHERE [Count] = 2 
+0

我会再试一次 - 它第一次不适合我。虽然谢谢! –