我的查询有许多左联接,因此,我为输入不正确而感到抱歉。 我确实有一个使用的时间范围,但我原本不需要它。 我刚刚添加了它。
我的选择语句在原始查询中大约有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值之类的特殊内容时。我认为我的限制有限,但不确定。
答案 0 :(得分:1)
在编辑之前返回原始帖子...一路上删除了太多内容,使问题难以理解。并且其中包含的内容不足以真正向我们展示问题。
我看到的两个基本问题是
and MCL.MCL_Status = '7'
否定了左联接,因此您需要将其移到联接本身。 这些其他问题可能以某种方式起作用。
因此,我们需要清理SR
,C
,MCL
,II
表别名,并且需要将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(最少完整且可验证的示例)以及预期结果非常有用。我们实际上不能解决问题,因为有太多错误。我们所能做的就是指出可能性。