T-SQL:最多两个其他列的SELECT相关列数据

时间:2011-01-21 16:58:53

标签: tsql max

我有如下表格数据,其中订单类型为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

2 个答案:

答案 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