Table_1
Stockno|StartDate|ServiceTag|Modelno
123 2015-08-01 ABC Inspiron
123 2015-06-01 DEF Inspiron
123 2015-08-01 GHI Inspiron
123 2015-08-01 JKL Inspiron
456 2015-08-01 MNO Galaxy
456 2015-07-01 PQR Galaxy
456 2015-08-01 STU Galaxy
456 2015-08-01 VWX Galaxy
456 2015-08-01 ABC GalaxyTable_2
Stockno |TransDate|TransType|ServiceTag|Modelno
123 2015-08-04 2100 ABC Inspiron
123 2015-08-19 2100 GHI Inspiron
456 2015-08-25 2100 STU Galaxy
123 2015-07-25 2100 DEF Inspiron我有两张桌子。Table_1是可用的股票。Table_2出售股票。
我想要售后剩余的存货。我编写了以下查询,它运行良好,但问题是它没有返回银河服务tag= ABC(未售出),因为Inspiron(servicetag=ABC)是出售的。因此,在剩余的股票,我应该得到总共5记录,而不是我只得到4。
如何更正此查询?
Select P.Stockno,P.Modelno,P.ServiceTag, Count(P.Stockno) as ClosingBal
From Table_1 as P
Where P.ServiceTag Not in (Select ServiceTag from Table_2 )
Group by P.Stockno,P.Modelno,P.ServiceTag发布于 2015-09-09 06:40:59
SQL FIDDLE DEMO
你的返回结果还不清楚。因为如果你想要总数,你必须改变组,如果你想要显示库存的项目,那么不需要计数。
Select P.Stockno, P.Modelno, P.ServiceTag, Count(P.Stockno) as ClosingBal
From Table_1 as P
left join Table_2 T
on P.Stockno = T.Stockno
and P.ServiceTag = T.ServiceTag
Where T.ServiceTag IS NULL
Group by P.Stockno, P.Modelno, P.ServiceTag这里我使用serviceTag和StockNo匹配两个表,因为您没有包含PK/FK
发布于 2015-09-09 06:42:33
使用此查询:
select s.* from
(
select a.*, case when b.stock_no is null then 'in stock' else 'sold' end [status]
from @stock a left join @sales b on a.service_tag = b.service_tag and a.model_no = b.model_no
) s where s.status <> 'sold'输出:
stock_no start_dt service_tag model_no status
123 2015-08-01 00:00:00.000 JKL Inspiron in stock
456 2015-08-01 00:00:00.000 MNO Galaxy in stock
456 2015-07-01 00:00:00.000 PQR Galaxy in stock
456 2015-08-01 00:00:00.000 VWX Galaxy in stock
456 2015-08-01 00:00:00.000 ABC Galaxy in stockhttps://stackoverflow.com/questions/32471995
复制相似问题