我想使用case语句在1月到12月之间获取成本,现在我得到Null而不是成本,这是我的代码如下

时间:2015-03-27 14:32:50

标签: sql-server-2008

 SELECT  dbo.postst.cost as Cost2014,
 case when (dbo.InvNum.OrderDate) between '2014/01/01' and '2014/12/31' then dbo.Postst.Cost end as Cost2014
 from dbo.postst INNER JOIN dbo.invnum on dbo.invnum.autoindex = dbo.postst.accountLink

1 个答案:

答案 0 :(得分:0)

以下是我用于跟踪此类问题的技术:

SELECT  dbo.postst.cost as Cost2014,
dbo.InvNum.OrderDate,
 case when (dbo.InvNum.OrderDate) between '2014/01/01' and '2014/12/31' then dbo.Postst.Cost end as Cost2014
from dbo.postst 
left JOIN dbo.invnum on dbo.invnum.autoindex = dbo.postst.accountLink

所以我添加了我正在进行某种处理的列,以查看我返回的值。然后我将内连接更改为左连接(暂时)。然后当我运行选择时,我通常可以看到为什么他们可能无法满足我的期望以及为什么我的查询没有重新调整正确的结果。

在这种情况下,您可能没有正确范围内的任何数据,或者联接可能不正确,因此根本没有记录。

你所拥有的是一个相对简单的查询,如果它更复杂,我经常使用select *而不是sepcific列来查看其他列中是否有影响结果的内容。如果您有一对多的关系,并希望只获得一条记录但在您选择的字段中获得重复项,则通常会出现这种情况。