(case when (substr(d.hy_dm,1,2)>=06 and substr(d.hy_dm,1,2)<=43) or substr(d.hy_dm,1,2)='71' or substr(d.hy_dm,1,2) in('51','52') then 0.13 when substr(d.hy_dm,1,2) in('01','02','03','04','05','44','45','46','47','48','49','50','53','54','55','56','57','60','63','70') then 0.09 else 0.06 end) 翻译此段代码
时间: 2023-08-06 20:21:00 浏览: 34
这段代码是一个SQL语句中的CASE语句,用于根据d.hy_dm的值返回不同的结果。如果d.hy_dm的前两位数字在06到43之间,或者是71,或者是51或52,则返回0.13;如果d.hy_dm的前两位数字在01到05,44到50,53到57,60,63或70之间,则返回0.09;否则返回0.06。其中substr函数用于截取d.hy_dm的前两位数字。
相关问题
SELECT C.HY_DM, C.HYMC, MAX ( CASE WHEN XSE.ND = '2021' THEN SUM(XSE.XSE) END ) XSE_2021, MAX ( CASE WHEN XSE.ND = '2022' THEN SUM(XSE.XSE) END ) XSE_2022 FROM HX_DJ.DJ_NSRXX NSRXX --纳税人基本信息 LEFT JOIN HX_DM_QG.DM_GY_HY B ON B.HY_DM = SUBSTR(NSRXX.HY_DM, 1, 2) --判定纳税人行业大类 LEFT JOIN HX_DM_QG.DM_GY_HY C ON C.HY_DM = B.SJHY_DM --判定纳税人行业门类 JOIN (SELECT SBB.DJXH, TO_CHAR(SBB.SKSSQQ, 'yyyy') ND, SUM(NVL(YBNSR.ASYSLJSXSE, 0) + NVL(YBNSR.AJYBFJSXSE, 0) + NVL(YBNSR.MSXSE, 0) + NVL(YBNSR.MDTBFCKXSE, 0)) XSE --分别计算纳税人销售额 FROM HX_SB.SB_SBB SBB, HX_SB.SB_ZZS_YBNSR YBNSR WHERE SBB.SBUUID = YBNSR.SBUUID AND SBB.GZLX_DM_1 <> '2' AND SBB.ZFRQ_1 IS NULL AND TO_CHAR(SBB.SKSSQQ, 'yyyy') IN ('2021' , '2022') --所属期 AND YBNSR.EWBLXH IN ('1', '3') GROUP BY SBB.DJXH, TO_CHAR(SBB.SKSSQQ, 'yyyy')) XSE ON XSE.DJXH = NSRXX.DJXH WHERE NSRXX.YXBZ = 'Y' AND NSRXX.KQCCSZTDJBZ = 'N' AND NSRXX.NSRZT_DM = '03' GROUP BY C.HYMC, C.HY_DM, XSE.ND ORDER BY C.HY_DM 验证以上代码语法错误
以上代码语法没有错误,但是在 `JOIN` 子句中,需要将 `IN` 操作符后面的两个参数之间的中文逗号改为英文逗号。修改后的代码如下:
```
SELECT C.HY_DM,
C.HYMC,
MAX(CASE WHEN XSE.ND = '2021' THEN SUM(XSE.XSE) END) XSE_2021,
MAX(CASE WHEN XSE.ND = '2022' THEN SUM(XSE.XSE) END) XSE_2022
FROM HX_DJ.DJ_NSRXX NSRXX --纳税人基本信息
LEFT JOIN HX_DM_QG.DM_GY_HY B ON B.HY_DM = SUBSTR(NSRXX.HY_DM, 1, 2) --判定纳税人行业大类
LEFT JOIN HX_DM_QG.DM_GY_HY C ON C.HY_DM = B.SJHY_DM --判定纳税人行业门类
JOIN (SELECT SBB.DJXH,
TO_CHAR(SBB.SKSSQQ, 'yyyy') ND,
SUM(NVL(YBNSR.ASYSLJSXSE, 0) + NVL(YBNSR.AJYBFJSXSE, 0) + NVL(YBNSR.MSXSE, 0) + NVL(YBNSR.MDTBFCKXSE, 0)) XSE --分别计算纳税人销售额
FROM HX_SB.SB_SBB SBB
JOIN HX_SB.SB_ZZS_YBNSR YBNSR ON SBB.SBUUID = YBNSR.SBUUID AND YBNSR.EWBLXH IN ('1', '3')
WHERE SBB.GZLX_DM_1 <> '2'
AND SBB.ZFRQ_1 IS NULL
AND TO_CHAR(SBB.SKSSQQ, 'yyyy') IN ('2021', '2022') --所属期
GROUP BY SBB.DJXH, TO_CHAR(SBB.SKSSQQ, 'yyyy')) XSE ON XSE.DJXH = NSRXX.DJXH
WHERE NSRXX.YXBZ = 'Y'
AND NSRXX.KQCCSZTDJBZ = 'N'
AND NSRXX.NSRZT_DM = '03'
GROUP BY C.HYMC, C.HY_DM, XSE.ND
ORDER BY C.HY_DM
```
优化一下此sql,select count(1) "笔数",trunc(SUM(A.JYJE)/10000,2) "金额/万元" from SKY.JY_RKLS A where a.dcpzlx_dm = '1' and substr(A.YSKM_DM,0,7) = '1010602' and A.JYJE >= 0 and substr(A.PZHM , 0,1) = '6' and A.Date >= DATE '2023-03-01';
可以考虑如下优化:
1. 将 WHERE 子句中的 A.JYJE >= 0 改为 A.JYJE > 0,这样可以避免将值为 0 的记录也计入结果中。
2. 将 WHERE 子句中的 substr(A.PZHM, 0, 1) = '6' 改为 A.PZHM LIKE '6%',这样可以使用索引快速定位符合条件的记录。
3. 将 WHERE 子句中的 A.Date >= DATE '2023-03-01' 改为 A.Date >= TO_DATE('2023-03-01', 'YYYY-MM-DD'),这样可以避免强制转换导致的性能损失。
综上所述,优化后的 SQL 如下:
SELECT COUNT(1) "笔数", TRUNC(SUM(A.JYJE)/10000, 2) "金额/万元"
FROM SKY.JY_RKLS A
WHERE A.dcpzlx_dm = '1'
AND SUBSTR(A.YSKM_DM, 0, 7) = '1010602'
AND A.JYJE > 0
AND A.PZHM LIKE '6%'
AND A.Date >= TO_DATE('2023-03-01', 'YYYY-MM-DD');