2016-10-18 4 views
0

私は2つの列、DatabaseNameとTableNameで構成されるテーブルを持っています。いくつかのテーブルは複数のデータベースにあります。私がしたいのは、個別のTableNameと、対応するデータベースにある場合はYを含む3つの新しい列を返すクエリを作成し、そうでない場合は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 

をもちろんのことは同じで行を結合していませんtablename一緒に。

+1

「GROUP BY tablename'を追加するだけです。次回はinclude dbschemaとサンプルデータを覚えておいてください。 –

答えて

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 
+0

チャームのように働いた。ありがとう。 – Saliceran

+2

'COUNT'は必要ありません。単に' max 'に変更することができます(CASE WHEN databasename =' DB1 'THEN' Y 'ELSE' N 'END) ' – dnoeth

関連する問題