SQL判断当前阶段(求救)

要求:判断当前阶段货值的类型,如果当前货值类型(hztype)不是立项,则取立项之后的货值image.png

WITH s004 AS (
	--取货值每月最新一版日期
	SELECT
		TO_CHAR (ETLDATE, 'yyyy-mm') yearmonth,
		TO_CHAR (MAX(ETLDATE), 'yyyy-mm-dd') ETLDATE
		--ROW_NUMBER () OVER (ORDER BY TO_CHAR(MAX(ETLDATE), 'yyyy-mm-dd') DESC) seq
	FROM
		EDW1_T_FACT_OP_HZ_PHA_HI
	GROUP BY
		TO_CHAR (ETLDATE, 'yyyy-mm')
),
 s005 AS (
	--关联最新日期取最近12月的货值
	SELECT
		TO_CHAR (T1.ETLDATE, 'YYYY-MM') YEARMONTH,
		T1.BUSINESSTYPECODE PRODUCTID,
		SUM (SELLAREA) ZMJ,
		SUM (HZ) hz
	FROM
		EDW1_T_FACT_OP_HZ_PHA_HI t1
	INNER JOIN s004 ON s004.ETLDATE = TO_CHAR (t1.ETLDATE, 'yyyy-mm-dd')
	WHERE
		t1.PHASEID = '${phaseid}'
	${if(len(HZTYPE) == 0,"","AND t1.HZTYPE IN  ('" + HZTYPE + "')")}
	--AND S004.SEQ 0
	GROUP BY
		TO_CHAR (T1.ETLDATE, 'YYYY-MM'),
		T1.BUSINESSTYPECODE
),
MIN_YEARMONTH as(
-- 取货值表的最小时间记录
SELECT 
	TO_CHAR(ETLDATE,'yyyy-mm') YEARMONTH,
	TO_CHAR(MIN(ETLDATE),'yyyy-mm-dd')
FROM 
	EDW1_T_FACT_OP_HZ_PHA_HI
group by TO_CHAR(ETLDATE,'yyyy-mm')
),
 S006 AS (
	--去CRM已售货值
	SELECT
		SUBSTR (WORKDATE, 1, 7) YEARMONTH,
		PRODUCTID,
		SUM (AREA) YSMJ,
		SUM (RMBHTTOTAL) RMBHTTOTAL
	FROM
		DM_MKT_FACT_YS
	WHERE
		PHASEID = '${phaseid}'
	AND ISBI = 1
${if(len(HZTYPE) == 0,"","AND 'YS' IN  ('" + HZTYPE + "')")}
	GROUP BY
		SUBSTR (WORKDATE, 1, 7),
		PRODUCTID
),
 S007 AS (
	--取维度表,最近12个月的日期
	SELECT
		DATE_DIM YEARMONTH
	FROM
		DIM_DATE
	WHERE
		DATE_DIM = (SELECT MIN(YEARMONTH) FROM MIN_YEARMONTH)
),
 S008 AS (
	--汇总累计已售货值
	SELECT
		S007.YEARMONTH,
		PRODUCTID,
		SUM (YSMJ) YSMJ,
		SUM (S006.RMBHTTOTAL) YSHZ
	FROM
		S007
	LEFT JOIN S006 ON S007.YEARMONTH >= S006.YEARMONTH
	GROUP BY
		S007.YEARMONTH,
		PRODUCTID
),
 --去不同的产品类型
S009 AS (SELECT DISTINCT PRODUCTID FROM S005),
 S010 AS (
	--拼出全维度的产品货值
	SELECT
		2 ITEMCODE,
		'经营货值' ITEMNAME,
		S007.YEARMONTH,
		S009.PRODUCTID,
		HZ  HZ,
		ZMJ
	FROM
		S009
	LEFT JOIN S007 ON 1 = 1
	LEFT JOIN S005 ON S009.PRODUCTID = S005.PRODUCTID
	AND S007.YEARMONTH = S005.YEARMONTH
	UNION ALL
		SELECT
			3 ITEMCODE,
			'已售货值' ITEMNAME,
			YEARMONTH,
			PRODUCTID,
			YSHZ YSHZ,
			YSMJ
		FROM
			s008
) SELECT
	YEARMONTH,
	PRODUCTID,
	SUM (hz) hz,
	SUM (zmj) zmj,
CASE
	WHEN NVL (sum(ZMJ), 0) = 0 THEN
		NULL
	ELSE
		sum(HZ) / sum(ZMJ)
	END XSJJ
FROM
	S010
	where length(PRODUCTID)>0
GROUP BY
	YEARMONTH,
	PRODUCTID
ORDER BY
	YEARMONTH,
	PRODUCTID


沉默的反补 发布于 2020-11-10 15:04 (编辑于 2020-11-10 15:05)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
yiyemeiyingLv4高级互助
发布于2020-11-10 18:49

====

用开窗函数处理,每个分类都有各种的阶段数,先算出每个分类的总结算数,如果只有一个阶段,就保留此阶段数据行,如果有大于等于一个阶段,就在where条件中过滤掉第一阶段的数据行;

====

where (c>1 and B !=1) or c=1

最佳回答
0
doudekaixinLv6中级互助
发布于2020-11-10 15:12

啥意思?没看懂

  • 沉默的反补 沉默的反补(提问者) 呃,就是一个项目的货值分好几个阶段,立项、方案、动工、交付的过程嘛,每个过程都产生货值,我做的这张图表的取数要求是如果当前项目的货值阶段不处于立项阶段的话,就不取立项的货值
    2020-11-10 15:21 
  • 3关注人数
  • 471浏览人数
  • 最后回答于:2020-11-10 18:49
    请选择关闭问题的原因
    确定 取消
    返回顶部