我有這個 :
| 人 | 晚餐 |
|---|---|
| 保羅 | 蘋果 |
| 阿爾弗雷德 | 香蕉 |
| 約翰 | 蘋果 |
| 吉米 | 香蕉 |
| 約翰尼 | 草莓 |
我想為Dinnerselect 子句中的列中的每個不同值指定一個特定的數字,如下所示:
| 人 | 晚餐 | 團體 |
|---|---|---|
| 保羅 | 蘋果 | 1 |
| 阿爾弗雷德 | 香蕉 | 2 |
| 約翰 | 蘋果 | 1 |
| 吉米 | 香蕉 | 2 |
| 約翰尼 | 草莓 | 3 |
我試過這個得到組:
SELECT case when (lag(Dinner) OVER (ORDER BY id) = Dinner) or (lead(Dinner) OVER (ORDER BY Dinner) = Dinner) then 1 else 0 end,* FROM restaurant ORDER BY Dinner desc)
它給了我這個:
| 人 | 晚餐 | 團體 |
|---|---|---|
| 保羅 | 蘋果 | 1 |
| 約翰 | 蘋果 | 1 |
| 阿爾弗雷德 | 香蕉 | 0 |
| 吉米 | 香蕉 | 0 |
| 約翰尼 | 草莓 | 1 |
它只給我1還是0因為case when這樣。
我很確定有更簡單的方法可以做到這一點,但我沒有找到任何方法。
有什么幫助嗎?
uj5u.com熱心網友回復:
為什么不使用DENSE_RANK?
SELECT Person,
Dinner,
DENSE_RANK() OVER (ORDER BY Dinner ASC) AS [Group]
FROM (VALUES('Paul','Apple'),
('Alfred','Banana'),
('John','Apple'),
('Jimmy','Banana'),
('Johnny','Strawberry'))V(Person, Dinner);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/447904.html
上一篇:在SQL中查找完全匹配
