在T-SQL查询中一起使用WHERE和HAVING的问题

时间:2015-10-16 02:59:03

标签: sql-server tsql

好吧,我继续犯这个错误,现在已经尝试了很多不同的方法了几个小时。希望有人可以提供帮助。

我正在尝试查询INFORMATION_SCHEMA.Columns以查找:

  1. 所有仅包含2列的表格

  2. 这两个列的名称都以“ID”

  3. 结尾

    这是我的问题:

    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结尾的列的表)并自行查看。

    有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您应该在LIKE子句中进行HAVING比较:

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