需要零值才能显示在查询中

时间:2018-08-31 20:34:28

标签: sql sql-server-2008

我的查询有许多左联接,因此,我为输入不正确而感到抱歉。 我确实有一个使用的时间范围,但我原本不需要它。 我刚刚添加了它。

我的选择语句在原始查询中大约有10-15列。 -我没有包括它们,因为它们并不重要(只是需要额外的数据)。

我的FROM语句以名为Cases c的表开头。

从那里,我有许多左连接,最终连接到inv_items表。此示例仅包括显示案例表和Inv_items表的左联接

Declare @start datetime, @end datetime

Select @start = '8-21-2017', @end = '8-21-2018'


select  
  mcl.procedure_name [Procedure],
  ii.INVITM_ITEM_NAME [Item name], 
  count(ii.INVITM_ITEM_NAME) [Count]
from 
   Cases C   
   left join Procedure_done MCL on
     on mcl.case_no = c.case_no
     and mcl.Station_ID = c.Station_ID 
   left join Inv_Items II
     on II.Part_Number = mcl.INV_Part_Number
where 
  and ii.INVITM_ITEM_NAME not like 'null'
group by  
  ii.INVITM_ITEM_NAME
order by
  ii.INVITM_ITEM_NAME asc

我的数据库包含超过10,000多个活动库存项目。即使没有使用我也需要为每个项目计数。他们正在努力消除不使用的产品。

如果很难理解,我深表歉意。我只能通过使用我的数据库来自学SQL。除此之外,它对我来说是陌生的,除了我需要显示0值之类的特殊内容时。我认为我的限制有限,但不确定。

1 个答案:

答案 0 :(得分:1)

在编辑之前返回原始帖子...一路上删除了太多内容,使问题难以理解。并且其中包含的内容不足以真正向我们展示问题。

我看到的两个基本问题是

  1. 计数需要来自右侧表格(MCL),而不是左侧(II)
  2. 其中的and MCL.MCL_Status = '7'否定了左联接,因此您需要将其移到联接本身。

这些其他问题可能以某种方式起作用。

  1. 表SR表别名来自哪里,在最后一个where子句限制处?
  2. C别名来自哪里
  3. MCL别名来自何处(表INV_ITEMS被两次表示?)来自
  4. 使用左联接时,左联接右侧的任何限制值都必须在联接本身上,否则左联接将成为内部联接。
  5. 由于字符串不同,因此'NULL'不同于缺少数据时的NULL。

因此,我们需要清理SRCMCLII表别名,并且需要将and MCL.MCL_Status = '7'移到联接而不是现在,where子句或左连接的行为类似于内部连接(我相信这是消除了青铜唱片的这一行)。现在,我不确定您是否使用“ null”一词作为字符串来表示某些东西。但是通常这是不好的形式,我们要消除NULL(没有数据),因为日期不能包含null,我假设c.Procedure_Date是日期;我们需要使用is not null语法对此进行更改以适当地处理null。

然后,我们需要计数来自MCL,因为我们希望来自右侧表的计数,而完整的名称列表来自左侧表。因此,您只想统计状态为7的“ BRONZE”记录,其中0正确?

在我们解决表别名之前,下面的内容仍然不完整,将无法正常工作。但是,我希望以上内容的标识能为您提供解决该问题的足够信息。

SELECT ii.INVITM_ITEM_NAME [Item name]
    , COUNT(MCL.INV_Part_number) [Count] 

FROM Inv_Items II
LEFT JOIN join Inv_Items MCL
  on II.Part_Number = MCL.INV_Part_Number 
 and II.InvItm_Active = '1' 
 and ii.PART_NUMBER_GUID=mcl.PART_NUMBER_GUID
 and MCL.MCL_Status = '7' 
WHERE (c.HIDDEN is null or c.HIDDEN <> 1) 
  and c.Procedure_Date between @start and @end 
  and c.Procedure_Date is not null 
  and ii.INVITM_ITEM_NAME is not null
  and sr.REPOSITORY_ID = (@repository)

GROUP BY ii.INVITM_ITEM_NAME
ORDER BY ii.INVITM_ITEM_NAME asc

以上内容说明了为什么提供MCVE(最少完整且可验证的示例)以及预期结果非常有用。我们实际上不能解决问题,因为有太多错误。我们所能做的就是指出可能性。