【发布时间】:2017-06-20 23:52:18
【问题描述】:
我想把左表的所有记录都拿出来,也想显示右表与左表匹配的记录。
1.ItemDynamic [左表]
ItemID StoreID SnapShotQuantity
-------------------------------------
111 1201 50
111 1001 25
111 5000 75
111 7777 100
2.Sub Query我的右表是sub query
这是我的子查询
SELECT
ViewItemMovement.ItemLookupCode,
ViewItemMovement.StoreID,
ViewItemMovement.ItemDescription,
ViewItemMovement.Brand,
Sum(ViewItemMovement.Quantity) Quantity,
ItemDynamic.SnapShotQuantity SnapShotQuantity,
ItemDynamic.SnapShotQuantity - Sum(ViewItemMovement.Quantity) SOH,
Item.cost,
(ItemDynamic.SnapShotQuantity - Sum(ViewItemMovement.Quantity)) * Item.cost AS ExtendedCost
FROM
FT_ViewItemMovement ViewItemMovement
left join Item with(NoLock) on Item.ItemLookupCode = ViewItemMovement.ItemLookupCode
left join ItemDynamic with(NoLock) on ItemDynamic.ItemID = Item.ID and ItemDynamic.StoreID = ViewItemMovement.StoreID
WHERE brand = 'PEPSI'
Group By
ViewItemMovement.ItemLookupCode,
ViewItemMovement.StoreID,
ViewItemMovement.ItemDescription,
ViewItemMovement.Brand,
Item.Cost,
ItemDynamic.SnapShotQuantity
子查询结果如下所示
ItemID StoreID Quantity SnapShotQuantity (pls leave other columns)
-------------------------------------------------
111 1201 335 50
111 1001 223 25
3.Item [此表有ItemLookupCode的ID,称为ItemID]
ItemLookupCode ID
------------------------
11121111 111
我尝试了以下查询,将 ItemDynamic 中的所有记录与 ItemID 和 StoreID [左表] 和 子查询 [右表] 中的匹配记录一起显示,它显示 Quantity、SnapshotQuantity、扩展价格
select
id.ItemID,
id.StoreID,
ViewItemMovements.ItemLookupCode,
ViewItemMovements.ItemDescription,
ViewItemMovements.Brand,
case when item.ItemLookupCode = item.ItemLookupCode
and id.StoreID = ViewItemMovements.StoreID then ViewItemMovements.Quantity
else 0 end Quantity,
id.SnapShotQuantity,
case when item.ItemLookupCode = item.ItemLookupCode
and id.StoreID = ViewItemMovements.StoreID then ViewItemMovements.SOH
else id.SnapShotQuantity end SOH,
Item.cost,
(id.SnapShotQuantity - (case when item.ItemLookupCode = item.ItemLookupCode
and id.StoreID = ViewItemMovements.StoreID then ViewItemMovements.Quantity
else 0 end))* Item.cost AS ExtendedCost
from
ItemDynamic id
left join Item with(NoLock) on Item.ID = id.ItemID
left join (
SELECT
ViewItemMovement.ItemLookupCode,
ViewItemMovement.StoreID,
ViewItemMovement.ItemDescription,
ViewItemMovement.Brand,
Sum(ViewItemMovement.Quantity) Quantity,
ItemDynamic.SnapShotQuantity SnapShotQuantity,
ItemDynamic.SnapShotQuantity - Sum(ViewItemMovement.Quantity) SOH,
Item.cost,
(ItemDynamic.SnapShotQuantity - Sum(ViewItemMovement.Quantity)) * Item.cost AS ExtendedCost
FROM
FT_ViewItemMovement ViewItemMovement
left join Item with(NoLock) on Item.ItemLookupCode = ViewItemMovement.ItemLookupCode
left join ItemDynamic with(NoLock) on ItemDynamic.ItemID = Item.ID and ItemDynamic.StoreID = ViewItemMovement.StoreID
--WHERE brand = 'PEPSI'
Group By
ViewItemMovement.ItemLookupCode,
ViewItemMovement.StoreID,
ViewItemMovement.ItemDescription,
ViewItemMovement.Brand,
Item.Cost,
ItemDynamic.SnapShotQuantity
) ViewItemMovements on ViewItemMovements.ItemLookupCode = Item.ItemLookupCode
and ViewItemMovements.StoreID = id.StoreID
where ViewItemMovements.Brand = 'pepsi' and id.StoreID <> 1303
order by ViewItemMovements.ItemLookupCode,StoreID
我更加重视以下列,尤其是 Quantity 和 SnapShotQuantity,如下所示
ItemID StoreID Quantity SnapShotQuantity (pls leave other columns)
-------------------------------------------------
111 1201 335 50
111 1001 223 25
111 5000 0 75
111 7777 0 100
但我只有在运行整个查询时才能得到子查询结果。我做错了什么
【问题讨论】:
标签: sql sql-server join stored-procedures left-join