sql - oracle 从联合选择中选择计数
问题描述
只是我需要获得总评论。所以我的查询需要选择和计数。这是我的sql。我对total_comments有疑问
SELECT customid,
dt,
customer_name,
e_mail,
phone,
TYPE,
message,
crm_status_id,
total_comments
FROM (SELECT f.ROWID AS customid,
f.dt AS d,
To_char(f.dt, 'YYYY-MM-DD HH24:MI:SS') AS dt,
f.first_name
|| ' '
|| f.middle_name
|| ' '
|| f.last_name AS customer_name,
f.e_mail,
f.phone,
Decode(f.feedback_type, 'CALLBACK', 'CALLBACK',
'FEEDBACK') AS TYPE,
f.feedback_message AS message,
f.crm_status_id AS crm_status_id,
(SELECT COUNT(*) FROM CRM_FEEDBACK_COMMENTS WHERE CRM_FEEDBACK_COMMENTS.FEEDBACK_ROW_ID = f.customid) as total_comments
FROM crm_feedback f
UNION ALL
SELECT g.ROWID AS customid,
create_date AS d,
To_char(create_date, 'YYYY-MM-DD HH24:MI:SS') AS dt,
c.customer_name1 AS customer_name,
p.email,
p.phone,
'MOBILSHOBE FEEDBACK' AS TYPE,
g.message_body AS message,
g.crm_status_id AS crm_status_id,
(SELECT COUNT(*) FROM CRM_FEEDBACK_COMMENTS WHERE FEEDBACK_COMMENTS.FEEDBACK_ROW_ID = g.customid) as total_comments
FROM feedback g
inner join sttm_customer@fcc_dblink c
ON c.customer_no = g.customer_no
inner join pg2_customer@fcc_dblink p
ON p.cif = g.customer_no)
我收到此错误:[Err] ORA-00904: "F"."CUSTOMID": invalid identifier
解决方案
您的表CRM_FEEDBACK_COMMENTS
用作CRM_FEEDBACK.rowid
外键。这是一个糟糕的设计,有几个原因。
- 它不是真正的外键,因为我们无法构建引用父 ROWID 的实际约束。
- ROWID 不是保证值:行可以移动(尽管很少),在这种情况下您的子记录是孤立的。
- 正如您所发现的那样,编写连接是一件令人头疼的事情。
ORA-00904: "F"."CUSTOMID": 标识符无效
您收到此错误消息是因为我们无法将列别名传递给标量游标。要解决您最初的问题,您需要CRM_FEEDBACK.rowid
将CRM_FEEDBACK_COMMENTS.FEEDBACK_ROW_ID
. 您可以使用内联视图(即 FROM 子句中的子查询)来执行此操作:
SELECT g.ROWID AS customid,
create_date AS d,
To_char(create_date, 'YYYY-MM-DD HH24:MI:SS') AS dt,
c.customer_name1 AS customer_name,
p.email,
p.phone,
'MOBILSHOBE FEEDBACK' AS TYPE,
g.message_body AS message,
g.crm_status_id AS crm_status_id,
FROM feedback g
left outer join
(SELECT FEEDBACK_ROW_ID, COUNT(*) as total_comments
FROM CRM_FEEDBACK_COMMENTS
group by FEEDBACK_ROW_ID) comm
on chartorowid(comm.FEEDBACK_ROW_ID) = g.ROWID
inner join sttm_customer@fcc_dblink c
ON c.customer_no = g.customer_no
inner join pg2_customer@fcc_dblink p
ON p.cif = g.customer_no)
推荐阅读
- android - 无法实例化应用程序 org.cocos2dx.javascript.base.MyApplication
- python - 比较忽略某些字符的单词 - Python
- javascript - “用户不是函数”——Discord.JS 和 Javascript
- android - Oculus Quest 2 - Android 设备在 Macbook Pro 上的 Unity 上没有响应 - 确保 USB 调试已启用
- angular - 如何防止请求被识别为未经授权?
- gradle - 如何在您的 Android 应用程序中拥有构建系统?
- typescript - TypeScript 未知接口
- reactjs - React Native 中的实时心电图
- django - 处理权限类中的异常
- python - python中的list和set有什么区别?