2009-08-04 9 views
1

TOADとT-SQLを使用してユーザーのスプレッドシートを近似しようとしています。ここでは、彼らが何をしたいの基本です:順序値を受信したときどうすればこのことができますか?カーソルは適切でしょうか?

Order Number Customer Name June July Aug Sept Oct Nov Dec 
12345  Bleh Company 1000 
                800 200 

最初の行が表し、2番目はの予想出荷日を表しているためと述べました。

次のSQLスクリプトはこれを配信しますが、受注日と受領日を交互に使用しません。

SELECT 'O', -- For Order Date 
      (SOM.[fcustno] + ' - ' + SOM.[fcompany]) AS [Customer], 
      sum(CASE month (SOM.forderdate) 
        WHEN 6 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [June], 
      sum(CASE month (SOM.forderdate) 
        WHEN 7 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [July], 
      sum(CASE month (SOM.forderdate) 
        WHEN 8 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Aug], 
      sum(CASE month (SOM.forderdate) 
        WHEN 9 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Sept], 
      sum(CASE month (SOM.forderdate) 
        WHEN 10 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Oct], 
      sum(CASE month (SOM.forderdate) 
        WHEN 11 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Nov], 
      sum(CASE month (SOM.forderdate) 
        WHEN 12 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Dec] 
     FROM SORELS SOR 
      JOIN SOMAST SOM 
      ON SOM.FSONO = SOR.FSONO 
      JOIN SOITEM SOI 
      ON SOI.FSONO = SOR.FSONO AND SOI.FINUMBER = SOR.FINUMBER 
     WHERE  FMASTERREL = 0 
      AND SOM.forderdate >= CONVERT (DATETIME, '05/29/2009') 
      AND SOM.forderdate < CONVERT (DATETIME, '08/04/2009') 
      AND SOI.fduedate < CONVERT (DATETIME, '01/01/2010') 
    GROUP BY (SOM.[fcustno] + ' - ' + SOM.[fcompany]) 
UNION 
    SELECT 'S', -- For Ship Date 
      (SOM.[fcustno] + ' - ' + SOM.[fcompany]) AS [Customer], 
      sum(CASE month (SOI.fduedate) 
        WHEN 6 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [June], 
      sum(CASE month (SOI.fduedate) 
        WHEN 7 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [July], 
      sum(CASE month (SOI.fduedate) 
        WHEN 8 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Aug], 
      sum(CASE month (SOI.fduedate) 
        WHEN 9 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Sept], 
      sum(CASE month (SOI.fduedate) 
        WHEN 10 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Oct], 
      sum(CASE month (SOI.fduedate) 
        WHEN 11 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Nov], 
      sum(CASE month (SOI.fduedate) 
        WHEN 12 THEN (sor.forderqty * SOR.funetprice) 
        ELSE 0 
       END) 
       AS [Dec] 
     FROM SORELS SOR 
      JOIN SOMAST SOM 
      ON SOM.FSONO = SOR.FSONO 
      JOIN SOITEM SOI 
      ON SOI.FSONO = SOR.FSONO AND SOI.FINUMBER = SOR.FINUMBER 
     WHERE  FMASTERREL = 0 
      AND SOM.forderdate >= CONVERT (DATETIME, '05/29/2009') 
      AND SOM.forderdate < CONVERT (DATETIME, '08/04/2009') 
      AND SOI.fduedate < CONVERT (DATETIME, '01/01/2010') 
    GROUP BY (SOM.[fcustno] + ' - ' + SOM.[fcompany]) 

お勧めはありますか?スクリプトの最後に2、1

BY

ORDER:以下を追加

答えて

1

「O」/「S」列に名前を付けてください(たぶんRowType)。次に、Customer、RowTypeで注文します。

ロブ

+0

ありがとうございます。それはうまくいった。私はあなたに投票することができればいいと思うが、私はまだ15のrepポイントを持っていない。 – DavidStein

+0

それはあなたの質問への答えとしてマークすることはできますが、そうですか? –

+0

そして...あなたは15ポイント以上持っていると思います。 –

2

してみてください。お客様が最初に注文し、次に注文/船で並べ替える必要があるようです。

関連する問題