我有如下表格数据,其中订单类型为1,报价为2,订单为2。任何给定的po_num都可以有0到多个order_type 1,但应该只有0或1的order_type 2,或者以上所有。
我需要返回给定po_num的max order_type的max order_num,其中order_num只是我结果中的另一个(但很重要)列。
表格数据:
order_type po_num order_num
1 E0102 1013200
1 E0102 1013162
1 E0104 1012161
2 E0104 1012150
1 E0104 1011449
2 E0107 1010034
2 E0108 1011994
期望的结果:
order_type po_num order_num
1 E0102 1013200
2 E0104 1012950
2 E0107 1010034
2 E0108 1011994
我能得到的最接近的是,它仍包括order_type为1的order(order_no)和order为type 2的order_no:
order_type po_num order_num
1 E0102 1013162
1 E0104 1012161
2 E0104 1012150
2 E0107 1010034
2 E0108 1011994
答案 0 :(得分:3)
我想你想要这个:
select order_type
, po_num
, max(order_num)
from orders o1
where order_type = (
select max(order_type)
from orders o2
WHERE o2.po_num = o1.po_num
)
group by po_num,order_type
在group by中包含order_type是一个工件,由于表的设计方式,它是必需的。
FWIW,报价和订单应分成两个表。当你得到奇怪的SQL这样一个困难或有条件的唯一约束时,它就是一个表设计问题。
答案 1 :(得分:0)
我假设您正在使用group by子句。你能加一个
吗?having order_type = max(order_type)
到你的sql?
有关'having'语句的详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms180199.aspx。