Как я могу сделать это? Подойдет ли курсор? - PullRequest
1 голос
/ 04 августа 2009

Я пытаюсь использовать TOAD и T-SQL для аппроксимации электронной таблицы пользователя. Вот основы того, что они хотят:

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

Первая строка представляет, когда была получена стоимость заказа, а вторая представляет предполагаемую дату отгрузки указанного заказа.

Следующий 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 ]

2 голосов
/ 05 августа 2009

Попробуйте добавить следующее:

ЗАКАЗАТЬ НА 2, 1

до конца вашего сценария. Кажется, что вам просто нужно отсортировать - сначала по клиенту, а затем по заказу / доставке

1 голос
/ 05 августа 2009

Вы должны дать имя вашему столбцу 'O' / 'S' (возможно, RowType). Затем заказывайте по RowType.

Rob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...