Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中选择2008年的数据_Sql_Sql Server 2008 - Fatal编程技术网

如何在SQL中选择2008年的数据

如何在SQL中选择2008年的数据,sql,sql-server-2008,Sql,Sql Server 2008,我的where子句有问题。我应该只选择2008年的数据 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'

我的where子句有问题。我应该只选择2008年的数据

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 
INNER JOIN  
    Sales.SalesOrderDetail s ON  p.SalesOrderID = s.SalesOrderID AND  
    P.DueDate >= '2008' AND p.DueDate < '2009'
GROUP BY
    p.SalesOrderNumber, p.Duedate, status
ORDER BY 
    SalesOrderNumber DESC
选择
计数(S.salesOrderID)、p.SalesOrderNumber、p.Duedate、状态=
当p.status=1时,则为“处理中”
当p.status=2时,则为“已批准”
当p.status=3时,则为“延期订购”
当p.status=4时,则为“拒绝”
当p.status=5时,则为“已装运”
结束
从…起
Sales.SalesOrderHeader p
内连接
p.SalesOrderID=s.SalesOrderID上的Sales.SalesOrderDetails s和
P.DueDate>='2008'和P.DueDate<'2009'
分组
p、 销售订单号、付款日期、状态
订购人
销售订单编号说明

你能告诉我如何更改where子句以便只包含2008年的数据吗?

Duedate的数据类型是DATETIME吗?如果是这样的话,那么您希望提供合格的日期,而不仅仅是年份:

WHERE p.Duedate >= '2008-01-01' and p.Duedate < '2009-01-01'
其中p.Duedate>='2008-01-01'和p.Duedate<'2009-01-01'

@zerkms我没有错误我得到了14000行,而我只得到了370行。我们怎么能猜出哪里出了问题?为什么每个问题都应该从调查开始,为什么你不从一开始就解释一下发生了什么?@zerkms我应该包括所有2008年的订单号,状态为te package-1:你问了三个密切相关的问题,但仍然没有分享基本信息:字段数据类型是什么?你需要完成的工作有哪些要求?返回的额外记录:p.DueDate的值是多少?@JamieF:它来自
AdventureWorks
示例数据库-这些记录非常有名,如果相关的话,您可以很容易地找到它们
p.DueDate
确实属于
datetime
类型,但仍然会出现相同的行扫描您是否显示了一些日期超出指定范围的行的示例?我注意到您在ON语句中使用了日期范围过滤器,但在主查询的WHERE子句中没有使用。试着把它们放在我提供的WHERE语句中。你有没有试着把日期范围从ON子句移到WHERE?