【发布时间】:2021-08-10 10:48:42
【问题描述】:
我有这样的情况,我有一个表,由于某种原因,一个名为 STORE_NUMBER 的列在实际结果中重复了多次,因此结果按项目级别而不是 store_number 的结果总和。
这是我的代码。有谁知道我如何调整代码(按商店分组),以便我有 1 行用于 STORE_NUMBER 1 和 1 行用于 STORE_NUMBER 2 等,并汇总每个特定商店的所有结果?
SELECT s.DEAGY AS 'AGENCY', l.cmschn AS 'MASTER_CHAIN', s.DECHN AS 'CHAIN', s.DESTR AS 'STORE_NUMBER', s.DEWEDT AS 'WK_ENDING',
CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY ELSE 0 END AS 'OB_UNITS',
CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN -1 * sm.DEQTY ELSE 0 END AS 'RET_UNITS',
CAST (( CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY ELSE '0' END) AS int)
-
CAST ( ( CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN -1 * sm.DEQTY ELSE '0' END ) AS int) AS 'NET_UNITS',
CAST (( CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN -1 * sm.DEQTY ELSE 0 END) AS Money)
/
CAST ( ( CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY ELSE 0 END ) AS Money)
*
CAST (100 AS Money) AS '%RET_UNITS',
CASE
WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERSP ELSE '0'
END AS OB_BILLING,
CASE
WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN (-1 * SM.DEQTY) * sm.DERSP ELSE 0
END AS RET_BILLING,
CAST ( ( CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERSP ELSE '0' END)
AS MONEY)
-
CAST ( ( CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN (-1 * sm.DEQTY) * sm.DERSP ELSE '0' END ) AS MONEY) AS 'NET_BILLING',
CAST (( CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN (-1 * SM.DEQTY) * sm.DERSP ELSE 0
END) AS Money)
/
CAST ( ( CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERSP ELSE '0' END) AS Money)
*
CAST (100 AS Money) AS '%RET_BILLING',
CASE
WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERPRC ELSE 0
END AS OB_MSRP,
CASE
WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN ( -1 * sm.DEQTY) * sm.DERPRC ELSE 0
END AS RET_MSRP,
CAST ( ( CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERPRC ELSE '0' END) AS MONEY)
-
CAST ( ( CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN (-1 * sm.DEQTY) * sm.DERPRC ELSE '0' END ) AS MONEY) AS 'NET_MSRP',
CAST (( CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN ( -1 * sm.DEQTY) * sm.DERPRC ELSE 0 END) AS Money)
/
CAST ( ( CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERPRC ELSE 0
END ) AS Money)
*
CAST (100 AS int) AS '%RET_MSRP'
INTO ##temp6
FROM REPIT.SMPDTA.SMPDTLM s
JOIN REPIT.LEVYDTA.LDSCHNM l
ON s.DEAGY=l.CMAGY AND s.DECHN=l.CMCHN
JOIN LEVYDTA.SMPRTNM sm
ON s.DEAGY=sm.DEAGY AND s.DECHN=sm.DECHN AND s.DESTR=sm.DESTR AND s.DEWEDT=sm.DEWEDT
where s.DEWEDT = 20210807 AND s.DEAGY=10 AND s.DECHN='WM';
【问题讨论】:
-
这里的大多数人都希望样本表数据和预期结果为格式化文本,而不是图像。 (而且我太老了,无法阅读那个微小的图像文本......)
-
轻松为您提供帮助 - 简化! minimal reproducible example
-
这能回答你的问题吗? SQL group by "column name"
-
@ru4ert 不,它没有帮助。我立即收到错误消息“消息 8120,级别 16,状态 1,第 4 行列 'REPIT.SMPDTA.SMPDTLM.DEAGY' 在选择列表中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。”
-
你能解释一下“结果是按项目级别而不是 store_number 的结果总和”吗? cz我不明白。我只是在你的代码 PRE_DATA 中看到最终的 SUM/AVG 等,如果我得到它的话。我们应该如何分组?你想看什么
标签: sql