当运行下面的代码时,我得到了重复的数据。有谁能帮帮我吗?
目标是在特定时间段内在前两列中列出产品和相应的订单。由于同一产品可能有多个订单,因此项目可能会重复。最后,在第三列中,我希望看到该产品的总销售额,而不考虑订单号。总而言之,应该是这样的:
product - order -产品的总体销售额(每个订单的销售额,总体销售额)
SELECT
OBITNO as "product",
OBORNO as "Order #",
summary
FROM MVXJDTA.OOLINE
LEFT JOIN (
SELECT
OBITNO as "product",
sum(OBORQA) as "summary"
FROM MVXJDTA.OOLINE
WHERE OBCONO=2 and OBWHLO=091 and OBCODT>20190701 group by OBITNO) md2
on OBITNO=OBITNO
WHERE OBCONO=2 and OBWHLO=091 and OBCODT>20190701
发布于 2019-07-25 22:43:39
您的联接不正确:
`on OBITNO=OBITNO`
在您的子查询中,您为列OBITNO
提供了别名product
,因此相等运算符的两端都是同一列,因为这将始终为真,因此您将得到一个交叉联接。相反,您应该使用ON md2.Product = OOLINE.OBITNO
SELECT
o.OBITNO as "product",
o.OBORNO as "Order #",
md2.summery
FROM MVXJDTA.OOLINE AS o
LEFT JOIN
( SELECT o.OBITNO as "product",
SUM(o.OBORQA) as "summery"
FROM MVXJDTA.OOLINE AS o
WHERE o.OBCONO=2
AND o.OBWHLO=091
AND o.OBCODT>20190701
GROUP BY o.OBITNO
) AS md2
ON md2.product = o.OBITNO
WHERE o.OBCONO=2
AND o.OBWHLO=091
AND o.OBCODT>20190701
我倾向于确保在每个列名前面加上表别名(通常即使只有一个表),这使得人们在读取我的查询时更容易找出数据来自何处,这也意味着这样的事情发生的次数会少得多,因为它会导致错误(即md2.OBITNO
不是有效的列引用)
发布于 2019-07-25 22:43:24
复制将来自您的join中的某个东西--但我不认为join真的是必要的。除非我误解了,否则您似乎是在对同一个表进行连接,以便获得总和。但是您可以使用窗口函数直接获得内联总和。
试试这个:
SELECT
OBITNO as "product",
OBORNO as "Order #",
sum(OBORQA) over(partition by OBITNO) as "summery"
FROM MVXJDTA.OOLINE
WHERE OBCONO=2 and OBWHLO=091 and OBCODT>20190701
发布于 2019-07-25 22:44:27
注意别名
SELECT OBITNO as "product"
, OBORNO as "Order #"
, summery FROM MVXJDTA.OOLINE md1
LEFT JOIN (
SELECT OBITNO as "product"
, sum(OBORQA) as "summery"
FROM MVXJDTA.OOLINE WHERE OBCONO=2 and OBWHLO=091 and
OBCODT>20190701 group by OBITNO) md2
on md2.OBITNO=md1.OBITNO
WHERE md2.OBCONO=2 and md2.OBWHLO=091 and md2.OBCODT>20190701
https://stackoverflow.com/questions/57204562
复制相似问题