Выборка с недоперевывертом или хитрющий запрос.

SFlash
Дата: 11.02.2010 16:33:52
Добрый день.

Сначала покажу на примере, потом объясню что надо :)

В нормальном виде можно написать так (вывести все значения или только положительные в зависимости от типа по конкретному документу)

 select storer, qty from receipt where key=@Param and type=25
 union all
 select storer, qty from receipt where key=@Param and qty>0 and type<>25

Но есть система в которой запросы проходят не напрямую в SQL а через специальный адаптер, где параметры подставляются сами, и выглядят :Param
Загвоздка в том, что этот адаптер подменяет только одно вхождение параметра, но никак не два.
Вот теперь собственно вопрос как переписать выражение выше, но используя параметр только 1 раз. Ни ХП ни функции нельзя использовать, т.к. в адаптер можно передавать только чистые select. If тоже не проходят, begin end тоже, т.е. ограничения жесточайшие.
Т.е. если бы можно было бы переписать

 select storer, qty from receipt rec1 where rec1.key=@Param and type=25
 union all
 select storer, qty from receipt rec2 where rec2.key=rec1.key and qty>0 and type<>25
но увы нельзя, но очень надо :)
Glory
Дата: 11.02.2010 16:35:32
select storer, qty from receipt rec1 where (rec1.key=@Param and type=25)
OR
(rec2.key=rec1.key and qty>0 and type<>25)
SFlash
Дата: 11.02.2010 16:39:22
Glory
select storer, qty from receipt rec1 where (rec1.key=@Param and type=25)
OR
(rec2.key=rec1.key and qty>0 and type<>25)


И как они сцепляются rec1 и rec2? поля storer, qty чьи? Через UNION пофиг чьи а тут как?
Думающий
Дата: 11.02.2010 16:41:00
select storer, qty from receipt where key=@Param and (type=25 or (qty>0 and type<>25))
Glory
Дата: 11.02.2010 16:42:30
SFlash
Glory
select storer, qty from receipt rec1 where (rec1.key=@Param and type=25)
OR
(rec2.key=rec1.key and qty>0 and type<>25)


И как они сцепляются rec1 и rec2? поля storer, qty чьи? Через UNION пофиг чьи а тут как?

А как они у вас тут "сцепляются" ?

select storer, qty from receipt rec2 where rec2.key=rec1.key and qty>0 and type<>25
SFlash
Дата: 11.02.2010 17:33:51
Думающий
select storer, qty from receipt where key=@Param and (type=25 or (qty>0 and type<>25))


Спасиб, заглянул когда уже сам додумался, что называется "Мозги замылились" :)
iap
Дата: 11.02.2010 17:42:44
А кто мешает перед запросом объявить переменные T-SQL и инициализировать их параметрами?
DECLARE
 @Param1 INT,
 @Param2 DATETIME;
SET
 @Param1= :Param1,
 @Param2= :Param2;
SELECT * FROM Table1 WHERE Field1=@Param1 ANSD Field2<@Param2
UNION ALL
SELECT * FROM Table2 WHERE Field1<>@Param1 ANSD Field2>=@Param2;