整个 w=10=wt

TSQL Row_Number

这个问题之前也有过类似的讨论,但我正在努力。

我需要根据客户购买模式找到前 N 个销售额..

理想情况下,这需要按年按月按客户排在前 N 个,但现在我只查看整个数据库的前 N ​​个。

我的查询如下:

-- QUERY TO SHOW TOP 2 CUSTOMER INVOICES BY CUSTOMER BY MONTH

SELECT
    bill_to_code,
    INVOICE_NUMBER,
    SUM( INVOICE_AMOUNT_CORP ) AS 'SALES',
    ROW_NUMBER() OVER ( PARTITION BY bill_to_code ORDER BY SUM( INVOICE_AMOUNT_CORP ) DESC ) AS 'Row'
FROM
    FACT_OM_INVOICE
    JOIN dim_customer_bill_to ON FACT_OM_INVOICE.dim_customer_bill_to_key = dim_customer_bill_to.dim_customer_bill_to_key
--WHERE
--    'ROW' < 2
GROUP BY
    invoice_number,
    Dim_customer_bill_to.bill_to_code

我无法理解给出的将 Row 限制为 =< N 的解决方案。

请帮忙。

试试这个。

-- QUERY TO SHOW TOP 2 CUSTOMER INVOICES BY CUSTOMER BY MONTH
;WITH Top2Customers
AS
(
SELECT
    bill_to_code,
    INVOICE_NUMBER,
    SUM( INVOICE_AMOUNT_CORP ) AS 'SALES',
    ROW_NUMBER() OVER ( PARTITION BY bill_to_code ORDER BY SUM( INVOICE_AMOUNT_CORP ) DESC ) 
    AS 'RowNumber'
FROM
    FACT_OM_INVOICE
    JOIN dim_customer_bill_to ON FACT_OM_INVOICE.dim_customer_bill_to_key = dim_customer_bill_to.dim_customer_bill_to_key
GROUP BY
    invoice_number,
    Dim_customer_bill_to.bill_to_code
)
SELECT * FROM Top2Customers WHERE RowNumber < 3

您必须将 select 包装到另一个中才能使用 row_number()

产生的值
select * from (
SELECT
    bill_to_code,
    INVOICE_NUMBER,
    SUM( INVOICE_AMOUNT_CORP ) AS SALES,
    ROW_NUMBER() OVER ( PARTITION BY bill_to_code ORDER BY SUM( INVOICE_AMOUNT_CORP ) DESC ) AS RowNo
FROM
    FACT_OM_INVOICE
    JOIN dim_customer_bill_to ON FACT_OM_INVOICE.dim_customer_bill_to_key = dim_customer_bill_to.dim_customer_bill_to_key
--WHERE
--    'ROW' < 2
GROUP BY
    invoice_number,
    Dim_customer_bill_to.bill_to_code
) base where RowNo < 2