簡體   English   中英

避免錯誤—子查詢返回多個行

[英]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”。 如果用戶選擇“美國”,則輸出應類似於

  1. 選擇你的立場
  2. 緬因州
  3. 弗吉尼亞州

我曾嘗試使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM