我对游标有疑问
问题是:对于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
答案 0 :(得分:1)
使用这个简单的查询 - 你已经完成了 - 没有杂乱的游标或任何需要的东西!我从这里得到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