2016-04-03 5 views
1

У меня есть sql-select (или insert), который несколько раз использует те же два параметра. Есть ли способ избежать использования нескольких одинаковых параметров для всех «?,?,?,?, ...» в списке?используют одни и те же параметры несколько раз

cursor.execute(statement, list) 

Я мог бы думать о двух именованных параметрах, но без возможности ввода кода.

В приведенном ниже примере каждый слева "?" соответственно правильно "?" это одна и та же строка. Я использовал семь отсчетов в одном утверждении, чтобы получить один результат.

select count(case (aart like "1%") and (adatum between ? and ?) when 1 then 1 else null end) as AufExt, 
     count(case (aart like "1%E") and (adatum between ? and ?) when 1 then 1 else null end) as AufExtE, 
     count(case (aart like "1%K") and (adatum between ? and ?) when 1 then 1 else null end) as AufExtK, 
     count(case (aart like "2S%") and (adatum between ? and ?) when 1 then 1 else null end) as AufInt, 
     count(case (eart like "3%") and (edatum between ? and ?) when 1 then 1 else null end) as EntExt, 
     count(case (eart like "3%K") and (edatum between ? and ?) when 1 then 1 else null end) as EntExtK, 
     count(case (eart like "2S%") and (edatum between ? and ?) when 1 then 1 else null end) as EntInt 
from tabelle 

Вопросы, относящиеся к этой проблеме: похоже, что индекс не используется в «случае». Верный?

+0

Проще: 'sum ((eart like '1%') и (adatum между? И?))' –

+0

это работает! Спасибо –

ответ

0

вы также можете дополнить пунктом, как это:

with 
    parms as (select ? as parm1, ? as parm2) 

выберите кол (случай (Aart как "1%") и (Adatum между parms.parm1 и parms.parm2), когда 1 затем 1 еще нуль конец), как AufExt ...

+0

Некоторые «случаи» используют adatum и некоторые edatum. Я использовал эти семь отсчетов в одном select-statement, чтобы получить один результат. –

+0

sory, я пропустил это –

1

documentation говорит:

?       Значок вопроса, за которым не следует число, создает параметр с номером один больше, чем самый большой номер параметра, уже назначенный. [...]
? NNN       Вопросительный знак с последующим числом NNN имеет место для NNN -му параметру. [...]
: AAAA       Двоеточие, за которым следует имя идентификатора, содержит место для именованного параметра с именем: AAAA. Именованные параметры также нумеруются. [...] Чтобы избежать путаницы, лучше избегать смешивания названных и нумерованных параметров.

+0

это работает! благодаря –