簡體   English   中英

基於 group by 進行排序的 SQL 條件

[英]SQL condition for ordering base on a group by

如何訂購一些數據,以 StockID 為 3 為基礎,在這種情況下還有兩個倉庫,WarehouseId 1 和 13,

select ProductID, WarehouseID, StockID
from @allStocksState 
group by ProductID, WarehouseID, StockID
order by CASE WHEN StockID = 3 then 0
             else 1 
         end

結果:

7002    13  3
7003    1   3
7003    13  3
7012    1   3
7012    13  3
6995    1   3
7020    13  3
7031    13  3
7045    1   3
7045    13  3
7046    1   3
7046    13  3

因此,在 6995,7020,7031 的情況下,應該出現在最后,因為在這種情況下,它們每個只有一個 WarehouseId,那么我需要對查詢進行哪些更改? 任何幫助將非常感激。

您可以按以下order by使用窗口函數:

select ProductID, WarehouseID, StockID
from @allStocksState 
group by ProductID, WarehouseID, StockID
order by count(*) over (partition by productid) desc,
         (case when StockID = 3 then 0 else 1 end);

count(*) over (partition by productid)計算有多少行具有相同的productid

select ProductID,WarehouseID,StockID from @allStocksState 
    group by ProductID,WarehouseID,StockID
    order by CASE WHEN StockID=3 then
    "ASC" else
    "DESC" end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM