0

探している結果を返さないサブクエリがあります。私の状態では、日付範囲の注文数が常にない3つの場所があり、結果が0で返されません。代わりに、それらの部分の他のすべてのデータが失われます。データをクエリするより良い方法があると確信しているので、ここに私のクエリがあります。

SELECT b.Part, b.Location, b.Last_12_Mo, b.Last_6_Mo,
           COUNT(sd.SBINV) AS Order_Count
      FROM (
            SELECT a.Part, a.Location, a.Last_12_Mo,
                   ISNULL(SUM(sd.SBQSHP), 0) AS Last_6_Mo
              FROM (
                    SELECT t3.Part, sd.SBLOC AS Location, ISNULL(SUM(sd.SBQSHP),0) AS Last_12_Mo
                      FROM Top300 t3
                      LEFT JOIN SalesData sd 
                        ON t3.Part   = sd.SBITEM
                       AND sd.SBINDT > '20120315'
                     GROUP BY t3.Part, sd.SBLOC
                    ) AS a 
              LEFT JOIN SalesData sd
                ON a.Part       = sd.SBITEM
               AND sd.SBINDT    > '20121015'
             GROUP BY a.Part, a.Location, a.Last_12_Mo
            ) AS b 
      LEFT JOIN SalesData sd
        ON b.Part       = sd.SBITEM
       AND sd.SBINDT    > '20130110'
     GROUP BY b.Part, b.Location, b.Last_12_Mo, b.Last_6_Mo
     ORDER BY b.Part, b.Location
4

2 に答える 2

0

これを試して

SELECT t3.Part, sd.SBLOC AS Location, 
ISNULL(SUM(CASE WHEN sd.SBINDT > '20120315' THEN sd.SBQSHP ELSE 0 END),0) AS Last_12_Mo,
ISNULL(SUM(CASE WHEN sd.SBINDT > '20121015' THEN sd.SBQSHP ELSE 0 END),0) AS Last_6_Mo,
COUNT(CASE WHEN sd.SBINDT > '20130110' THEN sd.SBINV END) AS Order_Count
FROM Top300 t3
LEFT JOIN SalesData sd  ON t3.Part   = sd.SBITEM
GROUP BY t3.Part, sd.SBLOC
ORDER BY t3.Part, sd.SBLOC

以下のOPのコメントに基づいて、すべてのパーツと場所の組み合わせを取得するには、パーツをロケーションテーブルと結合する必要があります(注:ロケーションテーブルに一致するようにロケーション列とテーブル名を変更してください)

SELECT t3.Part,  t3.Location, 
ISNULL(SUM(CASE WHEN sd.SBINDT > '20120315' THEN sd.SBQSHP ELSE 0 END),0) AS Last_12_Mo,
ISNULL(SUM(CASE WHEN sd.SBINDT > '20121015' THEN sd.SBQSHP ELSE 0 END),0) AS Last_6_Mo,
COUNT(CASE WHEN sd.SBINDT > '20130110' THEN sd.SBINV END) AS Order_Count
FROM 
(SELECT DISTINCT a.Part, b.Location from Top300 a, LocationTable b)   t3
LEFT JOIN SalesData sd  ON t3.Part   = sd.SBITEM and t3.Location = sd.SBLOC
GROUP BY t3.Part, t3.Location
ORDER BY t3.Part, t3.Location
于 2013-03-18T19:57:04.210 に答える
0

メイト、使用しているクエリ内:sd.SBINDT> '20121015'

外では、次を使用しています:AND sd.SBINDT> '20130110'

外部クエリが返されない前の結果。

于 2013-03-18T19:57:52.273 に答える