を取得:SELECTでGROUP BYでCASEを使用するSQL。 CASE-値を必要とするが、そうbasicially 1つの質問1つの問題がある行の値
1.質問 - 私は、テーブルに100列のように持っている(とどのキーまたはuindexが設定されていない)と、私はそのテーブルに参加するか、そのテーブルをサブセレクションしたいのですが、実際にはすべてのカラム名を書き出す必要がありますか?
2.問題は - 以下の例では、1質問を示して、私の実際のSQL文の問題
例:
A.FIELD1,
(SELECT CASE WHEN B.FIELD2 = 1 THEN B.FIELD3 ELSE null FROM TABLE B WHERE A.* = B.*) AS CASEFIELD1
(SELECT CASE WHEN B.FIELD2 = 2 THEN B.FIELD4 ELSE null FROM TABLE B WHERE A.* = B.*) AS CASEFIELD2
FROM TABLE A
GROUP BY A.FIELD1
話がある:私はCASEを入れていない場合それ自身のSELECT文には、実際のrownameをGROUP BYに入れなければならず、GROUP BYはNULL値をCASEからグループ化せず、行の実際の値をグループ化します。そのため、キーとuindexがないか、何らかの形で別の解決策が見つかるため、すべての列に結合するかsubselectする必要があります。
DBServerはDB2です。
これで言葉だけで、SQLはありません: 私は "ZD"と "EK"(1 = ZD、2 = EK)に分けることができる "ディストリビューター "。 「注文アイテム」には2つの異なる「departements」(ZD、EK)のうちの1つを持つことができますが、「ZD」と「EK」のフィールド/行は常に両方の値が入ります。私は "departement"を考慮するグループ分けが必要で、指定された "departement"(ZDまたはEK)が変化している場合にのみ、新しいグループを作成したい。
SELECT
(CASE WHEN TABLE.DEPARTEMENT = 1 THEN TABLE.ZD ELSE null END) AS ZD,
(CASE WHEN TABLE.DEPARTEMENT = 2 THEN TABLE.EK ELSE null END) AS EK,
TABLE.DISTRIBUTOR,
sum(TABLE.SOMETHING) AS SOMETHING,
FROM TABLE
GROUP BY
ZD
EK
TABLE.DISTRIBUTOR
TABLE.DEPARTEMENT
ここでは、GROUP BYのSELECTとZD、EKで動作します。問題は、たとえEKが指定されたDEPARTEMENTではなかったとしても、既に変更されていれば新しいグループを開きました。なぜなら、すでに上に説明していたので、CASEのNULLではなく実際のEK値を使用していたからです。
のようなものを解決する傾向があるかもしれないあなたは同じで表Bの列にテーブルAの各列の値を確認する意味でください列名、およびすべての列が一致する必要がありますか?それとも他のタイプのロジックを意味しますか? – WarrenT
正確には、しかしそれはちょっとした問題ですが、実際の問題ではありません。私は、近い将来にそれをさらに詳しく説明します。 – Khazar