循环后的Oracle SQL过滤行

时间:2017-08-24 19:22:19

标签: sql oracle pivot

在使用pivot命令后尝试将过滤器应用于我的查询时,我遇到了问题。

我正在使用此代码:

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')
)

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

问题是在Pivot之后你的列有新名称

所以你应该使用

WHERE [WTI_UMIDADE] = '00006'

答案 1 :(得分:0)

简单地说:

select * from ( **yourSql** ) where "'dynamicFieldName'" in ('a', 's', 'd')