我试图按客户,按月,按年查看总数量。我已经添加了group by子句,但是并没有按照我想要的方式对其进行分解。 SQL的新手。有提示吗?
尝试在openquery和sql中分组
select YEAR_
,MONTH_
,BILL_TO
,ORDER_QTY
from openquery(TESTSVR,'
select OD.QTY AS ORDER_QTY
,CASE
WHEN OH.BILLING = ''12345''
THEN ''TESTING''
WHEN OH.BILLING = ''98765''
THEN ''TESTING1''
WHEN OH.BILLING = ''15973''
THEN ''TESTING2''
END AS BILL_TO
,TO_CHAR(CRDT, ''MONTH'') AS MONTH_
,TO_CHAR(CRDT, ''YYYY'') AS YEAR_
from TEST.TESTSVR OD
LEFT JOIN TEST.TESTSVR2 OH
ON OD.ORDER = OH.ORDER
WHERE TO_CHAR(OH.CRDT, ''YYYY-MM-DD'') >= ''2019-01-01''
AND OD.SPCD = ''SPECIAL CODE 1''
AND OH.BILLING IN (''12345'',''98765'',''15973'')
GROUP BY TO_CHAR(OHCRDT, ''YYYY'')
,TO_CHAR(OHCRDT, ''MONTH'')
,CASE
WHEN OH.BILLING = ''12345''
THEN ''TESTING''
WHEN OH.BILLING = ''98765''
THEN ''TESTING1''
WHEN OH.BILLING = ''15973''
THEN ''TESTING2''
END
,OD.QTY
')
GROUP BY YEAR_
, MONTH_
, BILL_TO
, ORDER_QTY
这些是我想要达到的结果。我已经添加了实际结果,而不是预期的结果。
Actual:
Year_ Month_ Bill_To Order_qty
2019 January Testing 5
2019 March Testing 4
2019 February Testing 4
2019 January Testing1 5
2019 March Testing 9
2019 January Testing 7
2019 January Testing2 8
Wanting:
Year_ Month_ Bill_To Order_qty
2019 January Testing 12
2019 January Testing1 5
2019 January Testing2 8
2019 February Testing 4
2019 February Testing1 8
2019 February Testing2 8
答案 0 :(得分:0)
不要将ORDER_QTY
放在GROUP BY
中,而应在SUM(ORDER_QTY)
中使用SELECT
...
SELECT
YEAR_
,MONTH_
,BILL_TO
,SUM(ORDER_QTY) AS ORDER_QTY
FROM
openquery(TESTSVR,'
select OD.QTY AS ORDER_QTY
,CASE
WHEN OH.BILLING = ''12345''
THEN ''TESTING''
WHEN OH.BILLING = ''98765''
THEN ''TESTING1''
WHEN OH.BILLING = ''15973''
THEN ''TESTING2''
END AS BILL_TO
,TO_CHAR(CRDT, ''MONTH'') AS MONTH_
,TO_CHAR(CRDT, ''YYYY'') AS YEAR_
from TEST.TESTSVR OD
LEFT JOIN TEST.TESTSVR2 OH
ON OD.ORDER = OH.ORDER
WHERE TO_CHAR(OH.CRDT, ''YYYY-MM-DD'') >= ''2019-01-01''
AND OD.SPCD = ''SPECIAL CODE 1''
AND OH.BILLING IN (''12345'',''98765'',''15973'')
GROUP BY TO_CHAR(OHCRDT, ''YYYY'')
,TO_CHAR(OHCRDT, ''MONTH'')
,CASE
WHEN OH.BILLING = ''12345''
THEN ''TESTING''
WHEN OH.BILLING = ''98765''
THEN ''TESTING1''
WHEN OH.BILLING = ''15973''
THEN ''TESTING2''
END
,OD.QTY
')
GROUP BY
YEAR_
, MONTH_
, BILL_TO
实际上,是在远程位置完成所有操作吗?
SELECT
*
FROM
openquery(TESTSVR,'
SELECT
,TO_CHAR(CRDT, ''MONTH'') AS MONTH_
,TO_CHAR(CRDT, ''YYYY'') AS YEAR_
,CASE
WHEN OH.BILLING = ''12345''
THEN ''TESTING''
WHEN OH.BILLING = ''98765''
THEN ''TESTING1''
WHEN OH.BILLING = ''15973''
THEN ''TESTING2''
END
AS BILL_TO,
SUM(OD.QTY) AS ORDER_QTY
FROM
TEST.TESTSVR OD
LEFT JOIN
TEST.TESTSVR2 OH
ON OD.ORDER = OH.ORDER
WHERE
TO_CHAR(OH.CRDT, ''YYYY-MM-DD'') >= ''2019-01-01''
AND OD.SPCD = ''SPECIAL CODE 1''
AND OH.BILLING IN (''12345'',''98765'',''15973'')
GROUP BY
TO_CHAR(OHCRDT, ''YYYY'')
,TO_CHAR(OHCRDT, ''MONTH'')
,CASE
WHEN OH.BILLING = ''12345''
THEN ''TESTING''
WHEN OH.BILLING = ''98765''
THEN ''TESTING1''
WHEN OH.BILLING = ''15973''
THEN ''TESTING2''
END
')