如何生成一个标志来确定表所在的数据库?

时间:2016-10-18 20:30:42

标签: sql teradata

我有一个由两列组成的表,DatabaseName和TableName。有些表位于多个数据库中。我想要做的是编写一个返回不同TableName的查询和三个包含Y的新列(如果它位于相应的数据库中)或N(如果不存在)。为了澄清,表可以在TableName列中出现多次,但在每个条目的DatabaseName列中都会有不同的内容。基本上我想要一个表的列表,以及一个简单的方法来查看它所在的数据库。

我试过这样的事情:

sel distinct tablename, case when databasename='DB1' then 'Y' else 'N' end as DB1,
case when databasename='DB2' then 'Y' else 'N' end as DB2,
case when databasename='DB3' then 'Y' else 'N' end as DB3
from db.table_analysis

但它当然不会将具有相同表名的行组合在一起。

1 个答案:

答案 0 :(得分:1)

SELECT tablename, 
       CASE WHEN COUNT( CASE WHEN databasename='DB1' THEN 1 END) > 0 
            THEN 'Y'
            ELSE 'N'
       END as DB1,
       CASE WHEN COUNT( CASE WHEN databasename='DB2' THEN 1 END) > 0 
            THEN 'Y'
            ELSE 'N'
       END as DB2,
       CASE WHEN COUNT( CASE WHEN databasename='DB3' THEN 1 END) > 0 
            THEN 'Y'
            ELSE 'N'
       END as DB3
FROM db.table_analysis
GROUP BY tablename