2012-04-02 68 views
0

我有一個關於光標SQL Server的援助

的問題是問題:所有訂單,其在2008年8月到期顯示以下格式的細節

OrderNumber (n items) due DueDate is Status 

這是預期的輸出

SO75123(3 items) due Aug 12 2008 12:00AM is Shipped 

我有這個迄今爲止

DECLARE 
    @salesOrderID INT, 
    @salesOrderNum NVARCHAR(20), 
    @dueDate DATETIME, 
    @status NVARCHAR(20), 
    @totalDue MONEY, 
    @numDetail INT, 
    @count INT = 0; 

DECLARE salesReportCursor CURSOR 
FOR 
    SELECT Count(S.salesOrderID),p.SalesOrderNumber,p.Duedate, status = 
     CASE when p.status =1 THEN 'In Process' 
      when p.status =2 THEN ' Approved' 
      when p.status =3 THEN ' Backordered' 
      when p.status =4 THEN ' Rejected' 
      when p.status =5 THEN ' Shipped' 
     END 
    FROM Sales.SalesOrderHeader p, Sales.SalesOrderDetail s 
    WHERE p.SalesOrderID=s.SalesOrderID AND P.DueDate >= '2008' AND p.DueDate < '2009' 
    Group by p.SalesOrderNumber,p.Duedate,status 
    ORDER BY SalesOrderNumber DESC 

我應該繞360行,但我越來越像1400.請告訴我什麼是錯誤的,在我的where子句是導致錯誤。

我的數據庫中的圖片是http://www.2shared.com/photo/h2-jMQyP/AdventureWorks2008.html

+1

三件事情:1)你也許應該標記該「功課」(如果是),2)你應該做一個「內部連接」的SalesOrderHeader和SalesOrderDetail表之間...和3)也許問題出在你的「地方」,或者你應該在你的「組中」指定*少於*列「 – paulsm4 2012-04-02 02:22:20

+1

而且你不會將結果限制於2008年8月到期的訂單。 – HABO 2012-04-02 02:24:22

+0

@ paulsm4這是一個作業即時練習我的測試,這是下週 – user1297398 2012-04-02 02:26:35

回答

1

使用這個簡單的查詢 - 你就大功告成了 - 沒有凌亂的光標或anyhting這樣的需要!我得到370行從這樣的:

SELECT 
    Count(s.SalesOrderID), 
    p.SalesOrderNumber, 
    p.DueDate, 
    OrderStatus = 
    CASE 
     WHEN p.Status = 1 THEN 'In Process' 
     WHEN p.Status = 2 THEN ' Approved' 
     WHEN p.Status = 3 THEN ' Backordered' 
     WHEN p.Status = 4 THEN ' Rejected' 
     WHEN p.Status = 5 THEN ' Shipped' 
    END 
FROM 
    Sales.SalesOrderHeader p 
INNER JOIN 
    Sales.SalesOrderDetail s ON p.SalesOrderID = s.SalesOrderID 
WHERE 
    -- restrict "DueDate" to between Aug 1st, 2008, and Aug 31st, 2008 
    p.DueDate >= '20080801' AND p.DueDate < '20080901' 
GROUP BY 
    p.SalesOrderNumber, p.DueDate, p.Status 
ORDER BY 
    SalesOrderNumber DESC