繁体   English   中英

带有子查询的Oracle SQL

[英]Oracle Sql with subqueries

我正在使用相同的斯科特模式。问题像这样。 用描述性标签显示雇员,雇员,TA,DA,HRA,总津贴,保险,TDS,净扣除额,净额。

这里Ta是工资的30%,DA是工资的40%,hra是工资的50%,保险是5%sal,tds是5%sal。 总免税额为ta + da + hra。 总扣除额是ins + tds现在的净额是(sal +津贴-总扣除额)

我正在尝试使用with语句来实现

WITH T1 AS
 (SELECT (30 / 100 * SAL) AS TA FROM EMP),
T2 AS
 (SELECT (40 / 100 * SAL) AS DA FROM EMP),
T3 AS
 (SELECT (50 / 100 * SAL) AS HRA FROM EMP)
SELECT Empno, TA, DA, HRA, (ta + da + hra)
  FROM EMP, T1, T2, T3
 group by empno;

这样的事情。逻辑是错误的,我可以理解。

只需在单个查询中执行此操作:

select e.*, (ta + da + hra) as total_allowances,
       (sal + (ta + da + hra) - (ins + tds)) as net_salary
from (select empno, (sal * 30/100) as ta, (sal * 40/100) as da, 
             (sal * 50/100) as hra,
             (sal * 0.05) as ins,
             (sal * 0.05) as tds
      from emp
     ) e;

我不知道该group by是什么。 您没有聚合函数,并且具有像emp这样的表名,我希望每一行都有empno的唯一值。

select empno,
       sal,
       .3 * sal as ta,
       .4 * sal as da,
       .5 * sal as hra,
       .05 * sal as insurance,
       .05 * sal as tds,
       (.3 * sal) + (.4 * sal) + (.5 * sal) as total_allowances,
       (.05 * sal) + (.05 * sal) as total_deductions,
       sal + ((.3 * sal) + (.4 * sal) + (.5 * sal)) - ((.05 * sal) + (.05 * sal)) as netsal
  from emp

我不知道您要如何实现WITH子句。 您的t1 / t2查询将在整个表中分别执行每个计算。 您可以在同一查询中进行每个计算。 而且似乎没有涉及多个表,因此您不需要任何连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM