1

私が使用MySQL 5.0.88/Coldfusion8していて、バーコード/EAN に基づく製品を含むテーブルがあります。

したがって、サイズS,M,L,XLが 123 の製品の場合、テーブルには 4 つのレコードが含まれます。

 product size  ean              qty    disregard_inventory
 123     S     1111111111111     5     0
 123     M     1111111111112     7     0
 123     L     1111111111113     1     0
 123     XL    1111111111114     2     0

現在、このテーブルを次のように検索しています。

  SELECT count(a.id) AS total_records, a.disregard_inventory, a.qty
      FROM artikelstammdaten a
      ...
  GROUP BY a.style
  HAVING sum(a.qty) != 0 OR (a.disregard_inventory = 1) 

これは正常に機能し、売り切れていないすべての製品を選択します (すべての eans で合計 > 0)/常に入手可能です

機能を追加して、ユーザーが各サイズで少なくとも 1 個の製品を検索できるようにしたいと考えています。この場合、スタイル 123

   123   S   1
   123   M   0
   123   L   12
   123   XL  9

size M売り切れのため、結果セットには含まれません。

しかし、私はそれを機能させることができません。これは私が持っているものです(ゴミを生成します):

  GROUP BY a.style
  <cfif form.select_type EQ "running_sizes">
  HAVING a.qty!= 0 OR ( a.disregard_inventory = 1 )
  <cfelse>
  HAVING sum(a.bestand) != 0 OR (a.disregard_inventory = 1) 
  </cfif>   

質問:各原資産の数量が 0より大きい場合にのみ、
グループ化して含めることはまったく可能ですか? もしそうなら、ポインタをありがとう!stylestyleean

編集:
これが私の完全なクエリです。これをテストしています:

   SELECT count(a.id) AS gesamt_datensaetze, a.nos, a.nos_anzeige, a.bestand, SUM(a.bestand>0) AS what
       FROM artikelstammdaten a

        WHERE a.aktiv = "ja"
        AND a.firma LIKE "some_company" 

        // groups by seller_id, style
        GROUP BY a.iln, a.artikelnummer
        HAVING sum(a.bestand) != 0 OR (a.nos = "ja" AND a.nos_anzeige = "ja")   
        AND ( SUM(a.bestand > 0) = COUNT(*)) 

解決策:
分節欠落:

HAVING (( sum(a.bestand) != 0 ) OR (a.nos = "ja" AND a.nos_anzeige = "ja" ))
AND  ( SUM(a.bestand > 0) = gesamt_datensaetze  )

これは機能します。

4

3 に答える 3

1

これは、サブクエリの結合を使用して実行できます。基本的に、利用可能な数量がゼロである製品IDのセットに参加し、一致するものがなかった場合にのみ結果を返します。

SELECT count(a.id) AS total_records, a.disregard_inventory, a.qty
FROM artikelstammdaten a

LEFT JOIN (
    SELECT DISTINCT id
    FROM artikelstammdaten
    WHERE qty = 0
) b
ON b.id = a.id

WHERE b.id IS NULL
...

GROUP BY a.style
HAVING sum(a.qty) != 0 OR (a.disregard_inventory = 1)
于 2012-08-27T20:10:46.010 に答える
1

次のクエリをお勧めします。

SELECT COUNT(a.id) AS total_records, a.disregard_inventory, a.qty
    FROM artikelstammdaten a
    ...
GROUP BY a.style
HAVING (SUM(a.qty) != 0 OR (a.disregard_inventory = 1))
       AND (SUM(qty>0) = total_records)

total_recordsクエリに追加した最後の条件により、この商品のサイズ数 ( ) がこの商品の利用可能なサイズ数 ( ) と等しい場合にのみ、スタイルを返すことができますSUM(qty>0)
qty>0は 0 (指定されたサイズの商品が入手できない場合)、または 1 (入手可能な場合) を返します。つまりSUM(qty>0)、0 からサイズの総数までの整数を返します。

于 2012-08-27T20:14:47.093 に答える
1

MIN(a.qty) を確認する必要があると思います:

select product from t group by product having min(qty)>0
于 2012-08-27T20:14:50.763 に答える