2014-12-01 3 views
0

мне нужно получать значения в соответствии с входным параметром
Exemple:
пар = A, результат = АВЫ
пар = В, результат = В, ВВслучай, когда с подзапросами синтаксисом

Я знаю, что нужно использовать случай, когда заявления, но у меня есть некоторые проблемы с реализацией их
Любая помощь будет оценена

Параметр = «A»

select distinct(statut.STATUT_NAME)as statutList , 
case 'A' 
when 'A' then (select distinct(STATUT_NAME) as statutAllowed from STATUT where STATUT_NAME = 'AB') 
when 'B' then (select distinct(STATUT_NAME) as statutAllowed from STATUT where STATUT_NAME = 'BA' and STATUT_NAME = 'BB') 
end 
from STATUT statut; 
// request should returns AB 

Параметр = «B»

select distinct(statut.STATUT_NAME)as statutList , 
case 'B' 
when 'A' then (select distinct(STATUT_NAME) as statutAllowed from STATUT where STATUT_NAME = 'AB') 
when 'B' then (select distinct(STATUT_NAME) as statutAllowed from STATUT where STATUT_NAME = 'BA' and STATUT_NAME = 'BB') 
end 
from STATUT statut; 
// request should returns BA , BB 

Большое спасибо

ответ

1

Вы должны объявить переменную и использовать его в вашем случае, вместо жесткого кодирования значения в случае.

declare @param char(1) 

select distinct(statut.STATUT_NAME)as statutList, 
case @param 
when 'A' then (select distinct(STATUT_NAME) as statutAllowed from STATUT where STATUT_NAME = 'AB') 
when 'B' then (select distinct(STATUT_NAME) as statutAllowed from STATUT where STATUT_NAME = 'BA' and STATUT_NAME = 'BB') 
end 
from STATUT statut; 
1

Измените свой Case Statement следующим образом. Упоминание выражение param столбец в качестве ввода в заявлении Case

SELECT DISTINCT(statut.STATUT_NAME)AS statutList, 
       CASE param 
       WHEN 'A' THEN (SELECT DISTINCT(STATUT_NAME) AS statutAllowed 
           FROM STATUT 
           WHERE STATUT_NAME = 'AB') 
       WHEN 'B' THEN (SELECT DISTINCT(STATUT_NAME) AS statutAllowed 
           FROM STATUT 
           WHERE STATUT_NAME = 'BA' 
             AND STATUT_NAME = 'BB') 
       END 
FROM STATUT statut; 
+0

Большое спасибо за помощь :) – ulquiorra

1

Я предполагаю, что вы хотите:

select distinct(s.STATUT_NAME) as statutList 
from STATUT s 
where (@param = 'A' and s.statut_name = 'AB') or 
     (@paraem = 'B' and s.statut_name in ('BA', 'BB')); 

Некоторые наблюдения:

  • подзапросы в вашей версии есть нет так как внешний select находится в другом поле.
  • В вашей версии не упоминается имя параметра, которое я только что назвал @param.
  • Предложение 'B' в вашей версии всегда будет возвращать 0, потому что в нем есть AND, и оба условия не могут быть истинными одновременно.
+0

Благодарим вас за советы, я отвечу их в учетную запись. Вместо этого мне нужно использовать «in», а вместо этого », – ulquiorra

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