Възможно ли е да има множество оператори CASE в един оператор за избор на sqlplus?

По-рано зададох въпрос относно форматирането на изхода на sqlplus в HTML с помощта на оператор CASE.

Бях помолен да коригирам отчета, за да включа нова колона, което успях лесно, но бих искал да „CASE“ изхода на тази колона, така че да е цветно кодиран в html

select upper(lpad(country,6,' ')) cntry, max(timestamp) Timestamp,substr(LPAD(test_type,10,' '),0,10) Type,
CASE
        WHEN ((sysdate-max(timestamp))*1440) >=60 THEN '<span class="threshold-critical">'|| ' <======= ERROR over 60 minutes since last run'||'</span>'
        WHEN ((sysdate-max(timestamp))*1440) >=30 THEN '<span class="threshold-warning">'|| '<===== WARNING over 30 minutes since last run'||'</span>'
    ELSE '<span class="threshold-ok">'|| '<===== GOOD_____' ||'</span>'
    end status,
CASE
   WHEN (ROUND(AVG((NVL(s2_time,0)+NVL(s3_time,0)+NVL(s4_time,0)+NVL(s5_time,0)+NVL(s6_time,0)+NVL(s7_time,0)+NVL(s8_time,0)+NVL(s9_time,0)+NVL(s10_time,0))/1000),1)) >=60 THEN '<span class="average-critical"</span>'
   WHEN (ROUND(AVG((NVL(s2_time,0)+NVL(s3_time,0)+NVL(s4_time,0)+NVL(s5_time,0)+NVL(s6_time,0)+NVL(s7_time,0)+NVL(s8_time,0)+NVL(s9_time,0)+NVL(s10_time,0))/1000),1)) >=35 THEN '<span class="average-warning"</span>'
   ELSE '<span class="average-ok"</span>'
END Average
from rfgdba.perf_test_results ptr, rfgdba.perf_tests pt
where country is not null and test_id in ((select id from rfgdba.perf_tests where live='Y')) and test_type in ('ORACLE','SIEBEL') 
and timestamp > sysdate-(59/1440) and ptr.test_id=pt.ID
group by country, test_type
order by country, TRUNC(timestamp, 'HH24')

някакви идеи защо това не работи?

изходен пример - който странно показва, че работи от sqlplus

sqlplus изход за CASE в оператор за избор


person nyehus    schedule 06.10.2015    source източник
comment
не работи? Каква грешка получавате?   -  person Ollie    schedule 06.10.2015
comment
не трябва ли да се коментира rem new CASE statement added below?   -  person Utsav    schedule 06.10.2015
comment
Да, със сигурност можете да използвате повече от един CASE израз в SELECT. Какво имаш предвид под не работи? Би било полезно, ако създадете SQLFiddle, попълнен с таблици и данни, така че хората да могат да ви помогне да разберете какво се случва. Благодаря.   -  person Bob Jarvis - Reinstate Monica    schedule 06.10.2015
comment
@nyehus: Моля, публикувайте точното съобщение за изключение във вашия въпрос   -  person Gaurav Soni    schedule 06.10.2015
comment
редът „rem new CASE“, който току-що въведох, за да покажа новия ред, по отношение на грешката - не получавам нищо - не че мога да намеря   -  person nyehus    schedule 06.10.2015
comment
Но това изглежда част от вашия код. Дайте точната SQL заявка, каква грешка получавате, някои примерни данни в таблици и очаквания резултат въз основа на това. Примерът за SQLFiddle би бил по-добър.   -  person Utsav    schedule 06.10.2015
comment
Значи заявката не връща записи?   -  person Ollie    schedule 06.10.2015
comment
редът за коментар е премахнат от моя код   -  person nyehus    schedule 06.10.2015
comment
Току-що извлякох sql кода от моя скрипт и го стартирах в toad - и той връща резултат - вижте качено изображение - така че изглежда проблемът е в моето копие на файла set_markup, който създава изхода в html формат   -  person nyehus    schedule 06.10.2015


Отговори (1)


това трябва да работи, прост пример:

-- some test data
with data as
 (select 1 as id, 'A' as val
    from dual
  union
  select 2, 'B' from dual)
select case
         when id = 1 then
          '1'
         else
          'not 1'
       end as col1,
       case
         when val = 'B' then
          'B'
         else
          'not B'
       end as col2
  from data

вижте http://www.sqlfiddle.com/#!4/9eecb7d/7785

person Frank Ockenfuss    schedule 06.10.2015
comment
много благодаря - оказа се, че това са синтактични грешки, тъй като sql кодът се изпълнява успешно в toad, но не и в моя Windows скрипт, плюс също имаше грешка в моя set_markup конфигурационен файл - всичко работи както се очаква сега - person nyehus; 06.10.2015