我有一張這樣的表:
D | S
--|--
2 | 1
2 | 3
4 | 2
4 | 3
4 | 5
6 | 1
其中顯示了三種疾病(D)的癥狀代碼(S)。我想重新排列此表(DS),以便出現具有更多癥狀的疾病,即通過減少癥狀數量來對其進行排序,如下所示:
D | S
--|--
4 | 2
4 | 3
4 | 5
2 | 1
2 | 3
6 | 1
誰能幫我在 SQL Server 中為它撰寫 SQL 代碼?
我曾嘗試按以下方式執行此操作,但這不起作用:
SELECT * FROM (
select D,Count(S) cnt from D-S group by D
) Q order by Q.cnt desc
uj5u.com熱心網友回復:
select
D,
S
from
D-S
order by
count(*) over(partition by D) desc,
D,
S;
uj5u.com熱心網友回復:
兩種簡單的方法來解決這個問題:
--==== Sample Data
DECLARE @t TABLE (D INT, S INT);
INSERT @t VALUES(2,1),(2,3),(4,2),(4,3),(4,5),(6,1);
--==== Using Window Function
SELECT t.D, t.S
FROM (SELECT t.*, Rnk = COUNT(*) OVER (PARTITION BY t.D) FROM @t AS t) AS t
ORDER BY t.Rnk DESC;
--==== Using standard GROUP BY
SELECT t.*
FROM @t AS t
JOIN
(
SELECT t2.D, Cnt = COUNT(*)
FROM @t AS t2
GROUP BY t2.D
) AS t2 ON t.D = t2.D
ORDER BY t2.Cnt DESC;
結果:
D S
----------- -----------
4 2
4 3
4 5
2 1
2 3
6 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346748.html
標籤:sql sql-server 查询语句
上一篇:更新MySql中的列
下一篇:向SELECT添加自定義值
