T-SQL: ВЫБЕРИТЕ связанные данные столбца для максимум двух других столбцов - PullRequest
1 голос
/ 21 января 2011

У меня есть данные таблицы, подобные следующей, где тип заказа равен 1 для котировки и 2 для заказа.Любой заданный po_num может иметь от 0 до многих из order_type 1, но должен иметь только 0 или 1 для order_type 2 или все вышеперечисленное.

Мне нужно вернуть max order_num максимального order_type данногоpo_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_no) для order_type из 1 и order_no типа заказа 2:

order_type  po_num  order_num
1           E0102   1013162
1           E0104   1012161
2           E0104   1012150
2           E0107   1010034
2           E0108   1011994

Ответы [ 2 ]

3 голосов
/ 21 января 2011

Я думаю, что вы хотите это:

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

Включение order_type в группу по * является артефактом , это необходимо из-за того, как разработана таблица.

FWIW, котировки и заказы должны быть разбиты на две таблицы.Когда вы получаете странный SQL, подобный этому, сложные или условные уникальные ограничения, это проблема проектирования таблицы.

0 голосов
/ 21 января 2011

Я предполагаю, что вы используете предложение group by. Не могли бы вы добавить

having order_type = max(order_type)

на ваш sql?

См. http://msdn.microsoft.com/en-us/library/ms180199.aspx для более подробной информации об операторе «Имея».

...