2017-10-30 13 views
1

はのは、私は私の目標は、グループ化されたIDと値を使用して、この表を表示することで、異なるテーブルからのIDとVALUEを表示するレポートSQLグループ化エントリ

| ID | VALUE | 
    |----|-------| 
1 | 1 | 1  | 
2 | 1 | 0  | 
3 | 1 | 1  | 
4 | 2 | 0  | 
5 | 2 | 0  | 

を持っていると仮定しましょう。 VALUEをグループ化する私のルールは、「VALUEに少なくとも1が含まれている場合は「1」、それ以外の場合は「0」が表示されます。

私の現在のSQLは、だから私の質問があり、私は

| ID | VALUE | 
    |----|-------| 
1 | 1 | 1  | 
2 | 2 | 0  | 

をしたい

SELECT 
    TABLE_A.ID, 
    CASE 
     WHEN TABLE_B.VALUE = 1 OR TABLE_C.VALUE NOT IN (0,1,2,3) 
     THEN 1 
     ELSE 0 
    END AS VALUE 
FROM TABLE_A, TABLE_B, TABLE_C 
GROUP BY 
    TABLE_A.ID 
    (CASE 
     WHEN TABLE_B.VALUE = 1 OR TABLE_C.VALUE NOT IN (0,1,2,3) 
     THEN 1 
     ELSE 0 
    END) 

は、出力が出力に途中である

| ID | VALUE | 
    |----|-------| 
1 | 1 | 1  | 
2 | 1 | 0  | 
3 | 2 | 0  | 

に従っている(簡体字)されています。希望の出力を得るために現在のSQLを拡張する(または完全に変更する)方法はありますか?

+0

理由だけではなく、 'MAX()'を選択していませんか? – HoneyBadger

+1

どの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品を使用していますか? Postgres?オラクル? "_SQL_"はクエリ言語であり、特定のデータベース製品の名前ではありません。 –

+1

何についてTABLE、FOREIGN_TABLE Structres –

答えて

0

valueは常に0または1と仮定すると、あなたが行うことができます。他の値を取ることができ

select id, max(value) as value 
from t 
group by id; 

value場合:

select id, 
     max(case when value = 1 then 1 else 0 end) as value 
from t 
group by id; 
+0

私は実際にはばかだ、私は私のGROUP BYのケースを取ることを忘れた。今それは動作します。ありがとうございました。 – GummiBoat

1

FOREIGN_VALUE列で異なる値として0と1を使用している場合は、コメント内のHoneyBadgerで説明したmax()関数を使用すると、要件が満たされます。

SELECT 
    ID, 
    MAX(FOREIGN_VALUE) AS VALUE 
FROM (SELECT 
     ID, 
     CASE WHEN FOREIGN_VALUE = 1 
      THEN 1 
      ELSE 0 
     END AS FOREIGN_VALUE 
     FROM TABLE, 
     FOREIGN_TABLE) 
GROUP BY 
ID; 
+1

悲しいことに、私は1と0を自分で設定しています。FOREIGN_VALUE = 1は最終的なSQLの唯一の条件ではないので、 CASE WHENを使う方法。 – GummiBoat

+0

私はクエリを編集しました。これを試して。 –

+0

VALUE行を設定する条件は複数ありますし、MAXを使用して1つの列を直接参照することはできませんが、MAXに新しく作成されたVALUEへの方法がない限り、MAXは正しい方法ではないと思いますカラム。 – GummiBoat