Sql 嵌套AND或OR函数时使用案例的查询
我有以下疑问:Sql 嵌套AND或OR函数时使用案例的查询,sql,sql-server,Sql,Sql Server,我有以下疑问: select imitmloclotq.item_code as "Item Code", imitmloclotq.lot_no as "Lot #", format(imitmloclotq.qty_on_hand, 'n2') as "Qty On Hand", imitmloclotq.sub_inv_code as "Location", imitmloclotq.
select imitmloclotq.item_code as "Item Code",
imitmloclotq.lot_no as "Lot #",
format(imitmloclotq.qty_on_hand, 'n2') as "Qty On Hand",
imitmloclotq.sub_inv_code as "Location",
imitmloclotq.locator_code as "Sub Location"
from imitmloclotq (nolock)
where qty_on_hand !=0
order by item_code, lot_no
它会吐出大量数据,如下所示:
Item Code Lot # Qty On Hand Location Sub Location
-----------------------------------------------------------------
30501302 2177 5.00 F1 7C
30501305 1512 4.50 F1 5E
30501305 1512 -0.67 F1 FLOOR
30501306 1513 14.50 F1 5E
30501310 2229 31.81 F1 2A
30501312 1919 5.00 F1 4B
但我想添加一个称为Multiple Locations的列,如果行与上面的行是同一项,但位置或子位置不同,则会显示Multiple。例如,上述项目30501305在两个不同的子位置5E和地板上有两个批次。另一项可能具有相同的子位置,但位置可能不同
我需要一些这样的代码,但我真的不知道:
CASE
WHEN (imitmloclotq.item_code = previous row imitmloclotq.item_code)
AND (OR(imitmloclotq.sub_inv_code != previous row imitmloclotq.sub_inv_code, imitmloclotq.locator_code != previous row imitmloclotq.locator_code))
THEN "Multiple"
ELSE ""
END
根据您的描述,您需要:
它应该在两行上都显示多个吗?太棒了!非常感谢你!我把它清理干净了,它工作得很好。再次感谢,现在你为我指明了正确的方向,我发现了这个非常有用的链接,干杯。
select i.item_code as "Item Code",
i.lot_no as "Lot #",
format(i.qty_on_hand, 'n2') as "Qty On Hand",
i.sub_inv_code as "Location",
i.locator_code as "Sub Location"
(case when lag(i.sub_inv_code) over (partition by item_code order by lot_no) <> i.sub_inv_code or
lag(i.locator_code) over (partition by item_code order by lot_no) <> i.locator_code
then 'Multiple'
end) as new_column
from imitmloclotq i
where qty_on_hand <> 0
order by item_code, lot_no;