2012-06-27 1 views
0

Я теряю мое прикосновение здесь. В старые времена я бы придумал супер T-SQL-запрос,Как создать этот подзапрос T-SQL?

 
Select t1.Number, t1.TransactionType, t1.Description, t1.Vendor, 
(Select max(t2.BatchId) From table2 t2 
Where t1.Number=t2.Number and t1.TransactionType=t2.TransactionType 
Group By t2.number,t2.transactiontype) As BatchId 
From table1 t1 

Мне нужен второй столбец из таблицы2. Столбец называется «Результат».

Пример:

 
table1: 
Number, TransactionType, Description, Vendor 
1, Type1, Test1, Vendor1 
2, Type1, Test2, Vendor2 
1, Type2, Test3, Vendor3 
3, Type2, Test1, Vendor2 

table2: 
Number, TransactionType, BatchId, Result 
1, Type1, 12, error1 
1, Type1, 4, error2 
1, Type2, 8, success 
3, Type2, 7, success 

wanted ResultSet: 
Number, TransactionType, Description, Vendor, BatchId, Result 
1, Type1, Test1, Vendor1, 12, error2 
2, Type1, Test2, Vendor2, null, null 
1, Type2, Test3, Vendor3, 8,success 
3, Type2, Test1, Vendor2, 7,success 

Опубликованная запрос заботится о первых 5 столбцов. Теперь как насчет последнего столбца?

+0

Добавьте нужный столбец таблицы в инструкцию SELECT вашего запроса. IE: (Выберите max (t2.BatchId), Результат из таблицы2 t2 ... – blearn

+0

Подзапросы могут не возвращать более одного столбца в этом контексте. –

ответ

0
select t1.Number, t1.TransactionType, t1.Description, t1.Vendor, t2.BatchId, t2.Result 
from table1 t1 
left join 
(
    select t2.TransactionType, t2.number, t2.Result, t2.BatchId, 
    row_number() over (partition by t2.number, t2.TransactionType order by t2.BatchId desc) as BatchNumber 
    from table2 t2 
) t2 on t1.Number = t2.Number 
    and t1.TransactionType = t2.TransactionType 
    and t2.BatchNumber = 1 

Если вы можете быть уверены в том, что для каждой строки из t1 вы связаны строки в t2, то это будет лучше заменить левое соединение с внутренним соединением.

UPD В комментариях была обнаружена ошибка. Я изменил запрос на правильную версию.

+2

Вы преобразовали левое соединение во внутреннее соединение с вашим синтаксисом. Добавьте t.batchnumber = 1 к предложению ON, а не к предложению where. Http://wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN – HLGEM

+0

Это трюк oryol. И нет, я не гарантирую, что запись была передана. Таким образом, таблица результатов могут не иметь соответствующих значений. Левое соединение отлично. –

Смежные вопросы