如何在查询选择oracle sql中设置表达式变量
我有如下Oracle SQL:如何在查询选择oracle sql中设置表达式变量,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,我有如下Oracle SQL: SELECT z."date", z.id_outlet as idOutlet, z.name as outletName, z.matClass, z.targetBulanan, z.targetBulanan/totalVisit as targetAwal, z.actual,rownumber = tartot + rownumber as targetTotal FROM (SELECT
SELECT
z."date", z.id_outlet as idOutlet, z.name as outletName, z.matClass, z.targetBulanan, z.targetBulanan/totalVisit as targetAwal,
z.actual,rownumber = tartot + rownumber as targetTotal
FROM (SELECT
b.visit_date as "date", a.id_outlet, max(o.name) as name, max(a.target_sales) as targetBulanan, a.id_material_class as matClass,
max(x.totalVisit) as totalVisit, NVL(SUM(d.billing_value),0) as actual
FROM (
select * from target_bulanan
where deleted = 0 and enabled = 1 and id_salesman = :id_salesman AND id_material_class like :id_material_class AND id_outlet like :id_outlet AND month = TO_NUMBER(TO_CHAR(current_date,'mm')) and year = to_number(TO_CHAR(current_date,'YYYY'))
) a
INNER JOIN outlet o ON o.id_outlet = a.id_outlet
LEFT JOIN visit_plan b ON b.deleted = 0 and a.id_salesman = b.id_salesman AND a.month = TO_NUMBER(TO_CHAR(b.visit_date,'mm')) AND a.year = to_number(TO_CHAR(b.visit_date,'yyyy')) AND a.id_outlet = b.id_outlet
LEFT JOIN so_header c ON SUBSTR(c.id_to,'0',1) = 'TO' AND a.id_salesman = c.id_salesman AND a.id_outlet = c.id_outlet
LEFT JOIN assign_billing d ON c.no_so_sap = d.no_so_sap AND d.billing_date = b.visit_date AND a.id_material_class = (SELECT id_material_class FROM material WHERE id = d.id_material)
LEFt JOIN (SELECT id_salesman, to_char(visit_date,'mm') as month, to_char(visit_date,'yyyy') as year, id_outlet, COUNT(*) as totalVisit FROM visit_plan
WHERE deleted = 0
group by id_salesman, id_outlet,to_char(visit_date,'mm'), to_char(visit_date,'yyyy')) x on
x.id_salesman = a.id_salesman AND x.month = a.month AND x.year = a.year AND x.id_outlet = a.id_outlet
GROUP BY b.visit_date, a.id_outlet, a.id_material_class) z
CROSS JOIN (SELECT 0 as rownumber FROM DUAL ) r
CROSS JOIN (SELECT 0 as tartot FROM DUAL ) t
CROSS JOIN (SELECT '' as mat FROM DUAL ) m
CROSS JOIN (SELECT '' as outlet FROM DUAL ) o
ORDER by outletName, z.matClass, z."date"
我希望在select查询中rownumber的值是公式,但结果是此消息出错
ORA-00923:未在预期位置找到FROM关键字
92300000-“未在预期位置找到FROM关键字”
有人能帮我吗?谢谢这解决了原来的问题 查询中可能存在多个问题。毕竟,调试和编写查询的最佳方法是从简单开始,逐渐增加复杂性 但是,你确实有一个明显的错误。在最外层的
中选择:
SELECT z."date", z.id_outlet as idOutlet, z.name as outletName,
z.matClass, z.targetBulanan, z.targetBulanan/totalVisit as targetAwal,
z.actual,
rownumber = rownumber + 1 as row_number
=
不是Oracle语法——它看起来像是用于命名列的SQL Server扩展或MySQL变量的使用
我怀疑您想列举这些行。如果是这样,一种语法是行号()
:
在Oracle中,您还可以执行以下操作:
rownum as row_number
仅供列举-
更换线路
rownumber = rownumber + 1 AS row_number
用这个
rownum AS row_number
rownum是一个Oracle内置函数,它枚举结果集的每个记录,并自动递增
正如他在回答中提到的,您的问题还有很多
在第一次查看时(不执行),我可以列出有问题的行-
AND month = TO_NUMBER(TO_CHAR(current_date,'mm'))
AND year = to_number(TO_CHAR(current_date,'YYYY'))
使用sysdate代替当前的\u日期
LEFT JOIN so_header c ON SUBSTR(c.id_to,'0',1) = 'TO'
我想,你是故意这么做的-
LEFT JOIN so_header c ON SUBSTR(c.id_to,0,2) = 'TO'
i、 e.从索引0到2个字符的子字符串
另外,不需要那些交叉连接Yes,,但是rownumber是我为递增而创建的变量,就像我将它替换为变量x=x+2 rownumber,我的意思不是oracle中的函数,而是我从交叉连接创建的变量,,但是rownumber是我为increment创建的变量,就像我将它替换为变量x=x+2 rownumber一样,我指的不是oracle中的函数,而是我通过交叉连接创建的变量
LEFT JOIN so_header c ON SUBSTR(c.id_to,0,2) = 'TO'