【发布时间】:2018-10-16 09:43:26
【问题描述】:
在 Oracle SQL Developer 3.1.07 中,下面的两个子查询可以自行正确运行。我要做的就是将它们合并在一起,但 Oracle 给出了 ORA-12704: 字符集不匹配错误。我检查了类似的帖子以检查 UNION 语法,但我不明白错误来自哪里。 select 语句从两个查询中的相同列中选择字段,因此应该没有数据类型问题。
SELECT assessmentid,
claimdate,
firstdiagnosis,
affectedsystemdesc,
thirdparty,
SUM(settledamount) AS sam,
param
FROM (
SELECT x.xclaimassessment.assessmentid,
x.xclaimassessment.thirdparty,
x.xclaimassessment.firstdiagnosis,
x.xclaimassessment.affectedsystemdesc,
x.xclaimassessment.claimdate,
x.xclaimtreatmentinvoice.settledamount,
'Q1' AS param
FROM x.xclaimassessment left
JOIN x.xclaimtreatment
ON x.xclaimassessment.assessmentid = x.xclaimtreatment.assessmentid
LEFT JOIN x.xclaimtreatmentinvoice
ON x.xclaimtreatment.treatmentid = x.xclaimtreatmentinvoice.treatmentid
WHERE ( ( icd9 = '501'
OR icd9 = '162' )
AND thirdparty = 'N' )
AND months_between(
SYSDATE,
TO_DATE(
x.xclaimassessment.claimdate
)
) < 25
)
GROUP BY assessmentid,
claimdate,
firstdiagnosis,
affectedsystemdesc,
thirdparty,
param
UNION
SELECT assessmentid,
claimdate,
firstdiagnosis,
affectedsystemdesc,
thirdparty,
SUM(settledamount) AS sam,
param
FROM (
SELECT x.xclaimassessment.assessmentid,
x.xclaimassessment.thirdparty,
x.xclaimassessment.firstdiagnosis,
x.xclaimassessment.affectedsystemdesc,
x.xclaimassessment.claimdate,
x.xclaimtreatmentinvoice.settledamount,
'Q2' AS param
FROM x.xclaimassessment left
JOIN x.xclaimtreatment
ON x.xclaimassessment.assessmentid = x.xclaimtreatment.assessmentid
LEFT JOIN x.xclaimtreatmentinvoice
ON x.xclaimtreatment.treatmentid = x.xclaimtreatmentinvoice.treatmentid
WHERE months_between(
SYSDATE,
TO_DATE(
x.xclaimassessment.claimdate
)
) < 25
)
GROUP BY assessmentid,
claimdate,
firstdiagnosis,
affectedsystemdesc,
thirdparty,
param
HAVING SUM(settledamount) > 50000;
我们将不胜感激!
【问题讨论】:
-
离题:我仍然想知道为什么 Oracle 数据库开发人员/管理员大部分时间都使用别名。表名和列名全部大写,使查询更难阅读,因为您无法直接看到表名、列名等标识符和 SQL 关键字和 SQL 函数等语法之间的区别。
-
显示所有涉及的表的表结构。“为什么我要为我认为非常简单的 SQL 查询提供 MCVE?” -> meta.stackoverflow.com/questions/333952/…
-
基本上我是在工作中自学这一点,而我取代的那个人使用的是 CAPS。所以认为这是一个很好的做法。由于您提到的原因(即可读性),我更喜欢小写字母,所以也许我会切换。
-
是否涉及任何 nchar、nvarchar 或 nclob 列?此外,如果您愿意,我可以重新格式化 Raymond 的查询格式,这样可以更轻松地阅读它。最后一个 PS,3.1 版到现在已经 6 岁了……
-
thatJeffSmith 是的,有一个 NVARCHAR2 (1 CHAR) 列是问题所在。我现在将发布解决方案。
标签: sql oracle oracle-sqldeveloper