[英]Avoid the error — Subquery returns more than one row
我將使用下面的SQL作為值列表之一。 我有以下數據,並且我希望根據國家/地區選擇以不同的方式顯示數據。
country state
USA MAINE
USA VIRGINIA
CANADA ALBERTA
CREATE TABLE TEST
(
COUNTRY VARCHAR2(20 BYTE),
STATE VARCHAR2(20 BYTE)
)
Insert into TEST
(COUNTRY, STATE)
Values
('USA', 'MAINE');
Insert into TEST
(COUNTRY, STATE)
Values
('USA', 'VIRGINIA');
Insert into TEST
(COUNTRY, STATE)
Values
('CANADA', 'ALBERTA');
COMMIT;
條件是,如果一個國家有一個州,則默認情況下會顯示該州。 如果該國家有2個或更多州,則在第一行中為用戶提供“選擇您的州”選項,然后顯示州名稱。 例如,如果用戶選擇“ CANADA”,則默認情況下應顯示“ Alberta”。 如果用戶選擇“美國”,則輸出應類似於
我曾嘗試使用case語句,如下所示,但由於我的子查詢返回多行,我得到了錯誤“子查詢返回多行”。
SELECT COUNTRY,
CASE
WHEN COUNT (DISTINCT STATE) > 1
THEN
(SELECT STATE
FROM (SELECT 'Choose One' AS STATE, 1 FROM DUAL
UNION
SELECT STATE AS STATE, 2
FROM TEST
WHERE COUNTRY IN '&COUNTRY'
ORDER BY 2, 1))
WHEN COUNT (DISTINCT STATE) = 1
THEN
(SELECT STATE
FROM TEST
WHERE COUNTRY IN '&COUNTRY')
END
AS STATE
FROM TEST
WHERE COUNTRY IN '&COUNTRY'
GROUP BY COUNTRY
請讓我知道如何達到我的條件。
謝謝
我會顛倒你的邏輯。 不確定Oracle語法,因此請將此視為偽代碼:
SELECT 'Choose One' AS STATE, 1 WHERE (SELECT COUNT (DISTINCT STATE) FROM TEST WHERE COUNTRY IN '&COUNTRY') > 1
UNION
SELECT STATE AS STATE, 2
FROM TEST
WHERE COUNTRY IN '&COUNTRY'
ORDER BY 2, 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.