如何选择只有一种类型的记录,如果它存在,否则选择另一种类型在Oracle SQL?



假设我在后台使用Oracle Server,从多个表(不是表)的复杂查询集得到如下结果:

当我有像type in ('A','B')这样的where条件时出现。我在源表中也有其他类型,但现在我只使用这两种类型。

<表类> ID 代码类型tbody><<tr>11232214B33361245B22144123B

您可以使用ROW_NUMBER()功能来实现此结果,例如

WITH YOUR_TABLE_DATA (ID,CODE,TYPE)
AS
(
SELECT 1,  123,'A' FROM DUAL UNION ALL
SELECT 2 , 214,    'B' FROM DUAL UNION ALL
SELECT 3 , 336 ,   'A' FROM DUAL UNION ALL
SELECT 1 , 245     ,'B' FROM DUAL UNION ALL
SELECT 2 , 214 ,   'A' FROM DUAL UNION ALL
SELECT 4,  123 ,   'B' FROM DUAL 
)
SELECT X.ID,X.CODE,X.TYPE FROM
(  
SELECT Y.ID,Y.CODE,Y.TYPE,
ROW_NUMBER()OVER(PARTITION BY Y.ID ORDER BY Y.TYPE ASC)XCOL 
FROM YOUR_TABLE_DATA Y
)X WHERE X.XCOL=1 

https://dbfiddle.uk/aBbWTqZP

最新更新