2009-11-11 3 views
0

Я хочу вернуть несколько значений из запроса в oracle. Для экс:Как вернуть несколько значений с помощью case case в oracle

select count(*) 
from tablename a 
where asofdate='10-nov-2009' 
and a.FILENAME in (case 
    when 1 = 1 then (select distinct filename from tablename 
     where asofdate='10-nov-2009' and isin is null) 
    else null 
end); 

Я получаю ошибку: ORA 01427 однорядные подзапрос возвращает более одной строки

Пожалуйста, советы.

Спасибо, Дипак

+0

@CodeByMoonlight: Отличная работа! –

+0

Тогда проголосуйте за его ответ! ;-) – Thorsten

+0

Спасибо :) Хорошо отформатированный и отступом SQL всегда помогает. – MartW

ответ

0

Выполнить этот запрос:

select distinct filename from tablename 
where asofdate='10-nov-2009' and isin is null 

Вы увидите, что она возвращает более одной строки, которая вызывает ошибку ORA-01427.

3

Оператор CASE не может вернуть более одного значения, это функция, работающая на одно значение.

Это не требуется для вашего заявления, это заявление должно работать:

select count(*) 
from tablename a 
where asofdate='10-nov-2009' 
and a.FILENAME in (select distinct filename 
    from tablename 
    where asofdate='10-nov-2009' 
    and isin is null); 

Может быть, у вас есть еще один сценарий использования в виду? Что-то вроде этого: Select * От ATable где в случае КОГДА Тогда КОГДА Тогда ELSE END

Затем с помощью СЛУЧАЙ не может быть правильным сценарием. Может быть, это поможет вам в правильном направлении:

Select * 
From aTable 
Where <Case1> and column1 in <Subselect1> 
Or <Case2> and column1 in <Subselect2> 
OR Not (<Case1> Or <Case2>) and column1 in <Subselect3> 

Но это, вероятно, будет вполне определенная работа для оптимизатора ...

+0

Спасибо Железо. да, вы правы. Я использую регистр case для 2 условий, например, если todays_data = Monthend_date использовать имена файлов, которые lb_% else используют имена файлов, такие как returns_%. В таблице указано более одного имени файла. еще раз спасибо – Deepak

3

в своем заявлении СЛУЧАЙ отчетливый пытается вернуть несколько значений, когда только один разрешен, и ваш оператор SELECT вернет только одно значение в одну строку в настоящее время. Если вы пытаетесь получить количество каждого файла, сделать

SELECT FileName, Count(*) 
FROM tablename 
WHERE asofdate='10-nov-2009' and isin is null 
GROUP BY FileName 
0

Для всех я могу сказать, что вы ищете что-то вроде:

select a.filename, count(*) 
from tablename a 
where a.asofdate = '10-nov-2009' 
and exists (
    select * 
    from tablename b 
    where b.isin is null 
    and a.asofdate = '10-nov-2009' 
    and a.filename = b.filename 
) 
group by a.filename 

Это найдет количество имен файлов для день, для которого существует хотя бы одна строка, где isin is null.

Если вы редактируете свой вопрос и добавляете объяснение того, что ищете, вы можете получить более качественные ответы.

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