SQL逻辑问题

查询结果显示6个月份数据(1-6)(7-12),当前时间下如果查不到数据则显示上个期间数据,例如我传时间2024-5,显示的应该是2024年1-6月数据,如果没有这个区间数据则取2023年7月-12月的数据,SQL如下,怎么调整呐:

WITH RESULT AS(SELECT 

GSMC

,GSDM

,SUM(CASE WHEN LEFT(NY,4)='${year}' THEN TO NUMBER(DOYZ) END) YZP ,SUM (CASE WHEN LEFT(NY,4) = 'Ş{year-1}' THEN TO NUMBER(DQYZ) END ) YZL ,SUM(CASE WHEN LEFT(NY,4)='Ş{year-2}' THEN TO NUMBER(DQYZ) END ) YZQ FROM Z CD HOZHUOYUE.DM FINE ASSET VALUES NOT USING SAP WHERE LEFT(NY,4) IN ('Ş{year}','${year-1}','${year-2}')

AND RIGHT (NY,2)='${month end}'

GROUP BY GSMC,GSDM

UNION ALL

SELECT

'公司整体'GSMC

,'1000' GSDM

,SUM(CASE WHEN LEFT(NY,4)= '${year}' THEN TO NUMBER(DQYZ) END ) YZP ,SUM(CASE WHEN LEFT(NY,4)='${year-1)' THEN TO NUMBER(DQYZ) END ) YZL ,SUM(CASE WHEN LEFT(NY,4)='Ş{year-2}' THEN TO_NUMBER(DQYZ) END) YZQ FROM Z CD HOZHUOYUE.DM FINE ASSET VALUES NOT USING SAP

WHERE LEFT(NY,4) IN ('Ş{year}','Ş{year-1}','${year-2}')

AND RIGHT(NY,2) = '${month end}'

SELECT R.*

,CASE WHEN YZL = 0 OR YZL IS NULL OR YZP IS NULL THEN 0 ELSE YZP/YZL-1 END TB

FROM RESULT R

ORDER BY CASE WHEN GSMC=THEN 9999999999999

SQL 四三九六 发布于 5 天前
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于4 天前

如果上一个周期(半年)也没有呢

  • 四三九六 四三九六(提问者) 在往前推一个周期
    2024-07-05 08:42 
  • Z4u3z1 Z4u3z1 回复 四三九六(提问者) 那就只有用存储过程来做
    2024-07-05 08:44 
  • 四三九六 四三九六(提问者) 写个MAX(CASE WEHN )可以达成吗
    2024-07-05 09:01 
  • Z4u3z1 Z4u3z1 回复 四三九六(提问者) 想了有点绕。要绕晕...............
    2024-07-05 09:05 
  • 1关注人数
  • 106浏览人数
  • 最后回答于:4 天前
    请选择关闭问题的原因
    确定 取消
    返回顶部