2011-11-11 5 views
1

노동 조합 내에서의 경우?

내 코드는 다음과 같습니다.

SELECT 'Add or remove a keyword' AS 'Keyword', '1' AS 'row number' 
UNION 
SELECT '---------------------', '2' 
UNION 
SELECT 
    CASE 
    WHEN @list_item = 'duration' 
    THEN (SELECT duration FROM durationTable) 
    END 
    CASE 
    WHEN @list_item = 'location' 
    THEN (SELECT location FROM locationTable) 
    END 
, '3' 
ORDER BY 2 

문제는 이것이 지속 시간과 위치가 하위 쿼리로 선택되며 하위 쿼리가 하나의 결과로 제한된다는 것입니다. 또한 올바른 구문을 파악할 수없는 것 같습니다. 쿼리가 하위 쿼리가 아니므로 수준을 높이십시오.

union/select가 허용하는 구조를 유지하면서 마지막 비트를 쿼리하는 테이블을 변경하는 중 하나의 결과 대신 전체 테이블 열을 검색하는 방법이 있습니까?

팁이 있습니까? 봐 주셔서 대단히 감사합니다!

답변

0

꽤 아니지만, 난이 일을해야한다고 생각 :

SELECT 'Add or remove a keyword' AS 'Keyword', '1' AS 'row number' 
UNION 
SELECT '---------------------', '2' 
UNION 
SELECT duration, '3' FROM durationTable WHERE 1 = (SELECT CASE WHEN @list_item = 'duration' THEN 1 ELSE 0 END) 
UNION 
SELECT location, '3' FROM locationTable WHERE 1 = (SELECT CASE WHEN @list_item = 'location' THEN 1 ELSE 0 END) 
+0

왜 'WHERE' 절 대신에'CASE'를 사용 했습니까? – JNK

+0

@JNK, 맞습니다. CASE로 복잡하게 만드는 대신 간단한 WHERE 절을 사용해야했습니다. 나는 더 나은 해결책이기 때문에 당신의 대답을 upvoted했습니다. – PaulStock

2

첫째, 당신이 나쁜 디자인 알아야한다. 프리젠 테이션 레이어와 데이터 레이어를 혼합하면 길 아래로 문제가 발생할 수 있습니다. 당신이이 일에 절대적으로 최선을 다하고 있습니다 경우

그러나, 당신은 추가 SELECT으로 작업을 수행 할 수 있습니다

... 
UNION 

SELECT duration FROM durationTable, '3' 
WHERE @list_item = 'duration' 

UNION 

SELECT location FROM locationTable, '3' 
WHERE @list_item = 'location' 
... 

비 일치하는 쿼리가 빈 결과 집합을 반환하고 무시.

0
SELECT 'Add or remove a keyword' AS 'Keyword', '1' AS 'row number' 
UNION 
SELECT '---------------------', '2' 
UNION 
SELECT duration,3 FROM durationTable WHERE @list_item = 'duration' 
UNION 
SELECT location,3 FROM locationTable WHERE @list_item = 'location' 
관련 문제