目前,我的查詢如下所示:
SELECT TOP 1000
Yr, Mnth, Product, SUM(Price * Amount)
FROM
(SELECT
Random_product_name AS Product, Random_price AS Price,
Random_quantity AS Amount,
Random_order_dt AS Order_date,
YEAR(Random_order_dt) AS Yr, MONTH(Random_order_dt) AS Mnth
FROM
Random_table_1 a
JOIN
Random_table_2 b ON a.Random_ID = b.Random_ID
WHERE
a.Random_product_name LIKE 'XX_%'
AND a.Random_country = 'XX'
AND a.Random_price != 0
AND b.Random_order_dt BETWEEN 'Jan 01 2019 12:00AM' AND 'Jul 01 2021 12:00AM') x
GROUP BY
Yr, Mnth, Product
ORDER BY
Yr, CONVERT(INT, Mnth), CONVERT(INT, SUM(Price*Amount)) DESC
不用注意細節,真正的查詢當然看起來有點不同。但它的結果可能是這樣的:
| 年 | 錳 | 產品 | 和 |
|---|---|---|---|
| 2019年 | 1 | 一種 | 100 000 |
| 2019年 | 1 | 乙 | 90 000 |
| 2019年 | 1 | C | 80 000 |
| 2019年 | 1 | D | 70 000 |
| 2019年 | 1 | 乙 | 60 000 |
| 2019年 | 1 | F | 50 000 |
| 2019年 | 1 | G | 40 000 |
| 2019年 | 2 | 乙 | 120 000 |
| 2019年 | 2 | 一種 | 110 000 |
| 2019年 | 2 | D | 90 000 |
| 2019年 | 2 | C | 80 000 |
| 2019年 | 2 | 乙 | 60 000 |
| 2019年 | 2 | G | 30 000 |
| 2019年 | 2 | F | 20 000 |
依此類推,直到 2021 年 7 月。產品總和每個月都在變化,我想實作的是每個月只顯示其中的前 3 個,但在一張表中,如下所示:
| 年 | 錳 | 產品 | 和 |
|---|---|---|---|
| 2019年 | 1 | 一種 | 100 000 |
| 2019年 | 1 | 乙 | 90 000 |
| 2019年 | 1 | C | 80 000 |
| 2019年 | 2 | 乙 | 120 000 |
| 2019年 | 2 | 一種 | 110 000 |
| 2019年 | 2 | D | 90 000 |
等等。同樣,直到 2021 年 7 月。
查詢已簡化。實際上它看起來有點復雜,但我希望我想要完成的事情足夠容易理解。我不知道如何繼續,所以我很感激你能提供的任何幫助!先感謝您!
uj5u.com熱心網友回復:
您可以在 select 陳述句中使用帶有 partition_by 子句的 row_number,然后在 where 子句中使用結果。
要添加到頂部選擇:
row_number() over(partition by Yr, Mnth order by SUM(Price * Amount) desc) as rownum
然后使用以下 where 子句在上面添加一個選擇:
WHERE rownum <= 3
uj5u.com熱心網友回復:
我認為ROW_NUMBER可能對你有幫助
我無法測驗,我知道這不是一個很好的解決方案,但我認為這是總體思路:
SELECT * FROM
(SELECT
Yr, Mnth, Product, sold
ROW_NUMBER() OVER (
PARTITION BY Yr, Mnth, Product
ORDER BY sold DESC
) item_rank
FROM
(
SELECT TOP 1000
Yr, Mnth, Product, SUM(Price * Amount) as sold
FROM
(SELECT
Random_product_name AS Product, Random_price AS Price,
Random_quantity AS Amount,
Random_order_dt AS Order_date,
YEAR(Random_order_dt) AS Yr, MONTH(Random_order_dt) AS Mnth
FROM
Random_table_1 a
JOIN
Random_table_2 b ON a.Random_ID = b.Random_ID
WHERE
a.Random_product_name LIKE 'XX_%'
AND a.Random_country = 'XX'
AND a.Random_price != 0
AND b.Random_order_dt BETWEEN 'Jan 01 2019 12:00AM' AND 'Jul 01 2021 12:00AM') x
GROUP BY
Yr, Mnth, Product
ORDER BY
Yr, CONVERT(INT, Mnth), CONVERT(INT, SUM(Price*Amount)) DESC
)
)
WHERE item_rank <= 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336014.html
