Oracle 使用空格复制行:
我的数据集如下:Oracle 使用空格复制行:,oracle,Oracle,我的数据集如下: SELECT ' 1234 ' ID,NULL TAG,' AB' CODE FROM DUAL UNION ALL SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL UNION ALL SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL) 我正在尝试使用下面的查询获取副本。输出应该是第1行和第3行,但我只得到一行作为1或3的修剪输出 SELECT TRIM(ID),TRIM(TAG),T
SELECT ' 1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
UNION ALL
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL)
我正在尝试使用下面的查询获取副本。输出应该是第1行和第3行,但我只得到一行作为1或3的修剪输出
SELECT TRIM(ID),TRIM(TAG),TRIM(CODE) FROM
(SELECT ' 1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
UNION ALL
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL)
WHERE (TRIM(ID),TRIM(TAG),TRIM(CODE)) IN
(
SELECT TRIM(ID),TRIM(TAG),TRIM(CODE) FROM
(SELECT ' 1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
UNION ALL
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL)
GROUP BY TRIM(ID),TRIM(TAG),TRIM(CODE)
HAVING COUNT(*) >1
)
我刚刚运行了这个,它返回了第1行和第3行:
SELECT TRIM(ID),TRIM(TAG),TRIM(CODE)
FROM
(
SELECT ' 1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
UNION ALL
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL
)
WHERE TRIM(ID) IN
(
SELECT TRIM(ID)
FROM
(
SELECT ' 1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
UNION ALL
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL
)
GROUP BY TRIM(ID),TRIM(TAG),TRIM(CODE)
HAVING COUNT(*) >1
)
我将您的WHERE更改为仅引用TRIMID,而不是全部3个值
编辑1,部分问题是您正在将null与null进行比较,这是您无法做到的。因此,您可以对列执行null检查,如果为null,则替换它。我用nvlnull“na”包装了空列,因此它有一个值要比较:
SELECT TRIM(ID) id,TRIM(TAG) tag,TRIM(CODE) code
FROM
(
SELECT ' 1234 ' ID, nvl(null, 'na') TAG,' AB' CODE FROM DUAL
UNION ALL
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT ' 1234 ' ID,nvl(null, 'na') TAG,' AB' CODE FROM DUAL
UNION ALL
SELECT ' 1234 ' ID,nvl(null, 'na') TAG,' AC' CODE FROM DUAL
)
WHERE (TRIM(ID),TRIM(TAG),TRIM(CODE)) IN
(
SELECT TRIM(ID),TRIM(TAG),TRIM(CODE)
FROM
(
SELECT ' 1234 ' ID,nvl(null, 'na') TAG,' AB' CODE FROM DUAL
UNION ALL
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT ' 1234 ' ID,nvl(null, 'na') TAG,' AB' CODE FROM DUAL
UNION ALL
SELECT ' 1234 ' ID,nvl(null, 'na') TAG,' AC' CODE FROM DUAL
)
GROUP BY TRIM(ID), TRIM(CODE), TRIM(TAG)
HAVING COUNT(*) >1
)
请参见感谢您的回复……假设我在实际数据集中添加了一行,如SELECT'1234'ID、NULL标记、DUAL中的'AC'代码…………我不想将其视为重复。在这种情况下,你的想法将不复存在。如果是这样的话,那么你希望结果是什么?结果应该和前面所说的一样earlier@user1616243请看我的编辑。问题是您正在将null与null进行比较,而null不返回任何内容。所以你应该在列上做一个空检查,并用一个值替换它。这很有效..谢谢..我还把它转换成了一个连接,它也可以正常工作