Sql-Server

如何對數據進行分組,但僅按特定順序獲取行(範例應該更清楚;))

  • September 15, 2021

我有一些事情需要做,但我不知道該怎麼做 :)

我有以下數據:

我想要的結果

這些數據來自帶有 group by 的查詢(假設它是來自多個商店的數據,並且某些商店的“類型”與其他商店不同)。

我需要做的是只能通過“藝術”獲得一行,但具有最好的“類型”(“類型”=客戶的現金返還)

我需要按該順序輸入“類型”

  1. C

我怎樣才能把它放在我的 T-SQL 語句中?我仍然可以稍後在 .NET 中做一些事情,但我寧願將所有內容都放在 SQL 語句中。

感謝您的幫助 :)

您可以為每個應用一個行號Art並明確指定該順序與您的偏好匹配:

;WITH src AS 
(
 -- this CTE represents your "query with a group by"
 SELECT Art, Type FROM 
 (
   VALUES
   (2215,  'Z'),
   (2215,  'C'),
   (2215,  'M'),
   (2216,  'C'),
   (2216,  '')
 ) AS v(Art, Type)
),
apply_rn AS
(
 SELECT Art, Type,
 rn = ROW_NUMBER() OVER (PARTITION BY Art ORDER BY CASE Type
   WHEN 'M' THEN 1
   WHEN 'C' THEN 2
   WHEN 'Z' THEN 3
   ELSE 4 END)
 FROM src
)
SELECT Art, Type 
 FROM apply_rn 
 WHERE rn = 1
 ORDER BY Art;

結果:

Art    Type
----   ----
2215   M
2216   C

引用自:https://dba.stackexchange.com/questions/299628