2016-07-13 8 views
1

ためのSelectステートメント、グループ化私は(この例では簡体字)、次の表 'StockItems' を持っている:ここではMySQLの - の条件に一致するレコード

+----+----------+---------+---------+---------+-----+ 
| ID | SubCatID | Item | GroupID | Size | Def | 
+----+----------+---------+---------+---------+-----+ 
| 1 |  1 | 40mm |  2 | 1 | 1 | 
| 2 |  1 | 40mm |  2 | 1 | 0 | 
| 3 |  1 | 75mm |  3 | 1 | 1 | 
| 4 |  2 | 90mm |  4 | NULL | 1 | 
+----+----------+---------+---------+---------+-----+ 

は、私が持っているクエリです:

SELECT ID, SubCatID, Item, GroupID 
FROM StockItems 
WHERE ((GroupID = 0 OR GroupID IS NULL) OR ((GroupID IS NOT NULL OR GroupID <> 0) AND Def = 1) OR Size IS NOT NULL) AND Del=0 
ORDER BY SubCatID, Size, Item+0, Item 

ここで、DefはGroupIDのデフォルト項目であり、Delは削除済みを表します。

これは機能しますが、私は望む結果を得るためにさらに1つのステップが必要です。同じGroupIDおよびSize WHERE SubCatID = 1

グループID及びサイズは任意のグループIDに同じであれば、私はほぼ次のクエリを使用してそこに着いた、それはデフ= 1

レコードを取得したい:

SELECT ID, SubCatID, Item, GroupID 
FROM StockItems 
WHERE ((GroupID = 0 OR GroupID is Null) OR ((GroupID IS NOT NULL OR GroupID <> 0) AND Def = 1) OR Size IS NOT NULL) AND Del=0 
GROUP BY GroupID, Size 
ORDER BY SubCatID, Size, Item+0, Item 

しかし、私SubCatID = 1であるレコードにGROUP BYを適用したいだけです

GROUP BYがここに行く方法であるかどうかはわかりませんが、私が必要としているところで最も近いところです

0最初のクエリの

出力:後者クエリの

+-----+----------+---------------+----------+ 
| ID | SubCatID |  Item  | GroupID | 
+-----+----------+---------------+----------+ 
| 1 |  1 | 40mm Pipe | 2  | 
| 331 |  1 | 40mm Pipe | 2  | 
| 329 |  1 | 63mm Pipe | 3  | 
| 330 |  1 | 75mm Pipe | 4  | 
| 2 |  1 | 40mm Pipe | 2  | 
| 332 |  1 | 40mm Pipe | 2  | 
| 3 |  1 | 63mm Pipe | 3  | 
| 4 |  1 | 75mm Pipe | 4  | 
| 6 |  1 | 110mm Pipe | 6  | 
| 7 |  1 | 125mm Pipe | 7  | 
| 8 |  1 | 160mm Pipe | 8  | 
| 9 |  1 | 200mm Pipe | 9  | 
| 10 |  1 | 250mm Pipe | 10  | 
| 11 |  1 | 315mm Pipe | 11  | 
| 12 |  1 | 355mm Pipe | 12  | 
| 13 |  1 | 400mm Pipe | 13  | 
| 14 |  1 | 450mm Pipe | 14  | 
| 5 |  1 | 90mm Pipe | 5  | 
| 15 |  18 | 63mm 90 Be | NULL  | 
| 16 |  18 | 75mm 90 Be | NULL  | 
| 17 |  18 | 90mm 90 Be | NULL  | 
| 18 |  18 | 110mm 90 Be | NULL  | 
| 19 |  18 | 125mm 90 Be | NULL  | 
| 20 |  18 | 160mm 90 Be | NULL  | 
+-----+----------+---------------+----------+ 

出力:

+-----+----------+---------------+----------+ 
| ID | SubCatID |  Item  | GroupID | 
+-----+----------+---------------+----------+ 
| 1 |  1 | 40mm Pipe | 2  | 
| 329 |  1 | 63mm Pipe | 3  | 
| 330 |  1 | 75mm Pipe | 4  | 
| 2 |  1 | 40mm Pipe | 2  | 
| 3 |  1 | 63mm Pipe | 3  | 
| 4 |  1 | 75mm Pipe | 4  | 
| 6 |  1 | 110mm Pipe | 6  | 
| 7 |  1 | 125mm Pipe | 7  | 
| 8 |  1 | 160mm Pipe | 8  | 
| 9 |  1 | 200mm Pipe | 9  | 
| 10 |  1 | 250mm Pipe | 10  | 
| 11 |  1 | 315mm Pipe | 11  | 
| 12 |  1 | 355mm Pipe | 12  | 
| 13 |  1 | 400mm Pipe | 13  | 
| 14 |  1 | 450mm Pipe | 14  | 
| 5 |  1 | 90mm Pipe | 5  | 
| 15 |  18 | 63mm 9B  | NULL  | 
| 327 |  61 | Stainless St | 20  | 
+-----+----------+---------------+----------+ 

これは私が欲しいものですが、多くのグループID = NULLレコードとサイズ= NULLがあります..したがってこれらの結果は表示されません。ですから、私はGROUP BYをSubCatID = 1のところで発生させたいだけです。

+3

あなたは私たちに大きな恩恵を行うと、あなたが望む正確な出力を示してもらえますか? –

+0

集計関数なしでGROUP BY句を使用する理由を理解していない。 @ティムは正しいです、出力が助けるでしょう。 – Sergio

+0

私の質問の出力を表示する投稿を編集しました –

答えて

0

HAVINGを使用する必要があります。したがって、次のような何か:ここ

SELECT ID, SubCatID, Item, GroupID 
FROM StockItems 
GROUP BY GroupID 
HAVING SubCatID = 1 

MySQL Having

+0

感謝を備えた StockItems GROUP BY SubCatID FROMグループID 、この 'IDを選択、SubCatID、アイテムを試してみてください –

0

は、私が使用して終了ソリューションがあります:

SELECT ID, SubCatID, Item, GroupID, Size 
FROM StockItems 
WHERE (((GroupID IS NOT NULL OR GroupID <> 0) AND Def = 1) OR Size IS NOT NULL) AND Del=0 
GROUP BY GroupID, Size 
UNION ALL 

    SELECT ID, SubCatID, Item, GroupID, Size 
    FROM StockItems 
    WHERE (GroupID = 0 OR GroupID is Null) 
ORDER BY SubCatID, Size, Item+0, Item 
関連する問題