2016-06-23 88 views
1

我有一個工作查詢,如下所示CASE語句:轉換爲CHAR值,返回不同的數據類型

SELECT DISTINCT col1, col2, 
    CASE 
    WHEN COUNT(DISTINCT col3_typeID) OVER (PARTITION BY col1) = 1 
    THEN col3_typeID <-- this is what interests me 

    WHEN COUNT(DISTINCT col3_typeID) OVER (PARTITION BY col1) > 1 
    THEN COUNT(DISTINCT col3_typeID) OVER (PARTITION BY col1) 
    END 
    COUNT(col4) OVER (PARTITION BY col1) 
    FROM table 
    -- joins 
    -- other conditions 

我算什麼東西,如果COUNT() = 1,然後我返回ID而不是數字的的標識。理想情況下,我想返回該值爲ID的CHAR值。如果我試圖用CHAR類型的列來代替上述的標線,我得到

ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 

我也試過DECODE()爲:

THEN DECODE(col3_typeID, 1 , 'type1' 
         2, 'type2') 

,但我得到了同樣的錯誤,當然,作爲這是一個基本的數據類型限制。

有沒有解決方案?

回答

4

case表達式的所有分支都需要返回相同的數據類型 - 在您的情況下,爲char。您可以通過顯式轉換的數量在第二when分支到char也做到這一點:

CASE 
WHEN COUNT(DISTINCT col3_typeID) OVER (PARTITION BY col1) = 1 
THEN col3_typeID -- Assume this is a CHAR column 

WHEN COUNT(DISTINCT col3_typeID) OVER (PARTITION BY col1) > 1 
THEN TO_CHAR(COUNT(DISTINCT col3_typeID) OVER (PARTITION BY col1)) -- Here! 
END 
+1

作品!我希望我可以有時多想一些。儘可能接受。非常感謝。 – Andrejs

0

類型每種情況下都必須轉換爲同一類型。您試圖在第一種情況下返回CHAR,而在第二種情況下則返回COUNT()的結果。

您可以A)將它們強制爲相同類型(CAST)或B)返回兩個結果的記錄。

1

您在THEN和/或ELSE子句中混合了無關類型(CHARNUMBER作爲錯誤消息狀態)。雖然有些數據庫會自動將其轉換,但標準符合數據庫不需要這樣做。

因此,您應該在適當的地方使用CAST(number AS CHAR(1))

查找文章的全文我上寫道:

相關問題