2013-08-29 1 views
2

와 일치하는 값은 다음 표를 위의 쿼리와 테이블 값에서는 PL의 서브 쿼리/SQL

Table

SELECT QUEUENAME, 
     PRIORITY 
    FROM QUEUES 
WHERE QUEUENAME IN ('Windows','Macintosh') 

을 고려하지 교체가 더 QueueName로하지 "매킨토시" . 따라서 where 절에 일치하는 값이 없을 때마다 QueueName"Unknown" 값을 선택해야합니다.

어떻게이 쿼리를 수행 할 수 있습니까?

내가 찾고 있어요 출력은

| QUEUENAME | PRIORITY | 
|-----------|----------| 
| Windows |  1 | 
| Unknown |  3 | 
+2

에있는 곳을 제공 할 수 있습니까? 질문을 MySQL과 SQL Server로 태그 지정했지만 저장 프로 시저에 대한 Oracle의 언어 인 PL/SQL은 언급했지만 절차 코드는 표시하지 않습니다. –

답변

2

는이 같은 뭔가를 찾고 계십니까을 업데이트됩니까?

SELECT COALESCE(q.queuename, q2.queuename) queuename, 
     COALESCE(q.priority, q2.priority) priority 
    FROM 
(
    SELECT 'Windows' queuename FROM dual 
    UNION ALL 
    SELECT 'Macintosh' FROM dual 
) s LEFT JOIN queues q 
    ON s.queuename = q.queuename JOIN queues q2 
    ON q2.queuename = 'Unknown' 

출력 :

 
| QUEUENAME | PRIORITY | 
|-----------|----------| 
| Windows |  1 | 
| Unknown |  3 | 
여기

입니다 SQLFiddle 데모 (오라클)
여기 SQLFiddle 데모 (SQL 서버) 여기

+0

그는 queuename이 일치하지 않을 때 알 수없는 행을 리턴해야한다고 생각합니다. 그의 결과가 표시 될 것으로 기대하고 있습니다. Unknown 3 & Macintosh 3. 나는 틀린 경우 수정합니다. –

+0

@SarathiKamaraj 당신은 절대적으로 옳습니다. –

+0

@peterm 게시물이 유용하지만 여전히 내 출력과 일치하지 않습니다. –

0
create table queues as 
select 'Windows' as queuename, 1 as priority from dual union all 
select 'Linux' as queuename, 2 as priority from dual union all 
select 'Unknown' as queuename, 3 as priority from dual 
; 

with data_(qname) as (
select 'Windows' from dual union all 
select 'Macintosh' from dual 
) 
select coalesce(queues.queuename, default_.queuename) as queuename, 
     coalesce(queues.priority, default_.priority) as priority 
from data_ 
left outer join queues on queues.queuename = data_.qname 
inner join queues default_ on default_.queuename = 'Unknown' 
; 

QUEUENA PRIORITY 
------- ---------- 
Windows  1 
Unknown  3 
+0

이 답변은 Oracle (11g) 용입니다. 나 천천히 ...하지만 첫 번째 샷에서 맞아 :) – user272735

0

입니다 쿼리

입니다 당신은 창문이 알 수없는 창을 제공 매킨토시 주면
select * from queues where queuename in ('Windows','Macintosh') 
UNION ALL 
select * from queues where queuename in 
(
select decode 
(
(
select count(queuename) from queues 
where queuename NOT IN ('Windows','Macintosh') 
),1,NULL,'Unknown') 
queuename from queues where queuename NOT in ('Windows','Macintosh')) 

쿼리는 예상 결과를

을 제공합니다. 당신이 리눅스 매킨토시를주는 경우에 그것은 제공 리눅스 알 수없는 당신은 창을 줄 경우이 창을 제공합니다 알 수없는 알 수없는 당신은 알 수없는 리눅스를 줄 당신이 리눅스 윈도우를 제공 그것이 내가 오라클에 대한 코드를 쓰고 리눅스 창문

을주는 경우는 리눅스 알 수없는 를 제공하는 경우 단지 지난 사개월을 위해, 그래서 약간의 경험이보다 훨씬 더 간단한 코드 ...

을 제공 그리고 당신은 3 곳은 사용하는 DBMS

+0

@ kashif 칸이 체크에서 행운을 ... –

+0

@ kashif 어떤 행운 –