巩固我的岁月的方法,以获取每个客户每年的总数量

时间:2019-03-28 14:54:34

标签: sql sql-server openquery

我试图按客户,按月,按年查看总数量。我已经添加了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

1 个答案:

答案 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
        ')