2016-08-23 10 views
0
SELECT COUNT(ID) IDCount 
, SUM(ValueA) SumA 
, SUM(ValueB) SumB 
, FlagA 
, FlagB 
, GroupColumn 
FROM 
( SELECT w.ID 
    , x.ValueA 
    , x.ValueB 
    , y.FlagA 
    , y.FlagB 
    , w.GroupColumn 

    FROM tableW w 
    LEFT JOIN tableX x ON w.ID = x.ID 
    LEFT JOIN tableY y ON w.ID = y.ID 

    WHERE w.SomeColumn = SomeValue 
) res 

GROUP BY res.GroupColumn, res.FlagA, res.FlagB 

ORDER BY res.GroupColumn, res.FlagA DESC, res.FlagB DESC 

FLAGAとFlagBはフラグであるので、彼らは唯一の私はすべてのGroupColumnのグループ化、フラグの組み合わせごとに1のための4行を返すために、これを必要とするこれまでの1か0です。SQL-Serverのリターンは、グループごとに正確に4結果

何が起きているのか、時にはその内側のセレクトから戻ってくるものはないので、何も返されません。その場合、私はそのグループの3行しか返さない。私が必要とするのは、その4行目がIDCount、SumA、およびSumBの値が0のまま返ることです。

これは明らかです。これに関する助けを前もってありがとう!

答えて

1

サブクエリを外部テーブルにし、フラグ/グループを内部テーブルにして、2つを結合する必要があります。

各グループの列のすべての4つの組み合わせを取得するので、最初:

SELECT w.GroupColum, f.A, f.B 
FROM (SELECT DISTINCT GroupColumn FROM TableW) AS W 
     CROSS JOIN (VALUES (0, 0), (0, 1), (1, 0), (1, 1)) AS f (A, B) 

をこれは関係なく、組み合わせは、あなたのデータに存在するか否かの、あなたが必要なすべての組み合わせを提供します。その後、あなたのデータをそれに戻すことができます:

SELECT IDCount = COUNT(res.ID), 
     SumA = SUM(res.ValueA), 
     SumB = SUM(res.ValueB), 
     FlagA = f.A, 
     FlagB = f.B, 
     w.GroupColumn 
FROM (SELECT DISTINCT GroupColumn FROM TableW) AS w 
     CROSS JOIN (VALUES (0, 0), (0, 1), (1, 0), (1, 1)) AS f (A, B) 
     LEFT JOIN 
     ( SELECT w.ID, x.ValueA, x.ValueB, y.FlagA, y.FlagB, w.GroupColumn 
      FROM tableW w 
      LEFT JOIN tableX x ON w.ID = x.ID 
      LEFT JOIN tableY y ON w.ID = y.ID 
      WHERE w.SomeColumn = SomeValue 
     ) res 
      ON res.GroupColumn = w.GroupColumn 
      AND res.FlagA = f.A 
      AND res.FlagB = f.B 
GROUP BY f.A, f.B, w.GroupColumn; 
+0

お返事ありがとう!残念ながら、私は以前と同じ結果を得ています。私はONに変更: )RES ON res.GroupColumn = W.GroupColumn とFA =私は4件の結果を得ることができる唯一の方法は、完全にこの2行を削除することでした res.FlagA とfb = res.FlagB: AND fA = res.FlagA AND fB = res.FlagB しかし、これは私に同じ結果を4回与えます。 –

+0

私はいくつかの列/結合が乱れてしまった。それはあなたのために今働きますか? – GarethD

+0

外側のselect文のres.GroupColumnをw.GroupColumnに変更すると、これが解決されました。この巧妙なソリューションをありがとうございました! –

関連する問題