2017-08-24 19 views
0

我在使用pivot命令嘗試將過濾器應用於查詢時遇到問題。數據透視後的Oracle SQL過濾器行

我使用這個代碼:

SELECT * 
FROM (
SELECT 
ovar.object_header_id, 
c.name || '[' || oval.sequence || ']' as name, 
CASE 
    WHEN(oval.value_string IS NOT NULL) 
    THEN TO_CHAR(oval.value_string) 
    WHEN(cval.value_string IS NOT NULL) 
    THEN TO_CHAR(cval.value_string) 
    WHEN(oval.value_number IS NOT NULL) 
    THEN TO_CHAR(oval.value_number) 
    WHEN(cval.value_number IS NOT NULL) 
    THEN TO_CHAR(cval.value_number) 
    ELSE NULL 
END AS value 
FROM object_value oval 
INNER JOIN object_variant ovar 
ON ovar.id = oval.object_variant_id 
INNER JOIN characteristic c 
ON c.id = oval.characteristic_id 
LEFT JOIN characteristic_value cval 
ON oval.characteristic_value_id = cval.id 
WHERE ovar.object_type_id  = 1374 
) 
pivot (
max(VALUE) for (NAME) in ('WTI_AMBIENTE[0]','WTI_TIPO[0]','WTI_UMIDADE[0]','WTI_LINHA_DE_PRODUTO[0]','WTI_ESPACO[0]','WTI_SUBSTRATO[0]','WTI_COR[0]','WTI_ESQUEMA_TINTA[0]','WTI_UMIDADE[1]','WTI_TIPO_AGUA[0]','WTI_VELOCIDADE[0]','WTI_UMIDADE[2]') 
); 

而且它我得到一臺這樣的(列名是太大,所以改爲數字)

 1  2 3  4  5  6   7  8  9 
----------------------------------------------------------------------- 
1003353792 NA 00003 00008 00002 00004 Não Aplica 00001 m10 
1003353793 NA 00003 00008 00002 00004 Não Aplica 00001 m11 
1003353794 NA 00003 00008 00002 00004 Não Aplica 00001 m1 
1003353795 NA 00003 00008 00002 00004 Não Aplica 00002 m14 
1003353796 NA 00003 00008 00002 00004 Não Aplica 00002 m15 
1003353797 NA 00003 00008 00002 00004 Não Aplica 00001 m12 
1003353798 NA 00003 00008 00002 00004 Não Aplica 00002 m13 
1003353799 NA 00003 00008 00002 00004 Não Aplica 00002 m18 
1003353800 NA 00003 00008 00002 00004 Não Aplica 00001 m19 

現在我需要過濾我的新表,不要說我只想要列8中具有「00001」的行,但我找不到正確的代碼。

我嘗試這樣做底,但沒有成功(編譯器說,「VALUE」是無效的)

WHERE (NAME, VALUE) IN (
('WTI_UMIDADE' , '00006') 
) 

感謝您的幫助!

+0

是否有一個名字''WTI_UMIDADE''在'NAME'列?它是**不包含**在'PIVOT'的'IN'列表中,所以與'NAME'相對應的任何值都將在'PIVOT'後完全移除。或者你的意思是''WTI_UMIDADE [0]'等等? – mathguy

回答

0

的問題是透視後您的列具有新名稱

所以,你應該用

WHERE [WTI_UMIDADE] = '00006' 
+0

其實沒有「你的專欄」的概念,也沒有專欄給出了新的名字。相反,PIVOT刪除了一些舊的列,而是創建了新的**列**。 (沒有列有一箇舊名稱,現在有一個新的名稱。)而不是檢查'NAME ='WTI_UMIDADE'和VALUE =​​',現在要檢查的值是**新** *列*,標記爲「WTI_UMIDADE [0]」。 (順便說一句,新創建的列應該給出標準名稱,不需要雙引號......這是一個側面問題。) – mathguy

+0

@mathguy首先你是正確的,看起來像是一個語言差異問題,我思想很明顯,但我也指的是那裏的新列,其次是列名稱是混淆,OP使用三個不同的,我選擇了同情,但看起來像新列名爲'WTI_UMIDADE [0]' –

+0

感謝胡安和Mathguy,我加入了你的兩個答案,使用「WTI_UMIDADE [0]作爲UMIDADE」和WHERE UMIDADE ='00006' –

相關問題