我在使用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')
)
感谢您的帮助!
是否有一个名字''WTI_UMIDADE''在'NAME'列?它是**不包含**在'PIVOT'的'IN'列表中,所以与'NAME'相对应的任何值都将在'PIVOT'后完全移除。或者你的意思是''WTI_UMIDADE [0]'等等? – mathguy