加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 选择没有唯一键的单行

发布时间:2020-12-12 06:42:25 所属栏目:MsSql教程 来源:网络整理
导读:我有一张这样的桌子 Fld1 Fld2 Fld3------------0 1234 ABC0 1235 DEF1 1236 GHI2 1236 JKL3 1236 MNO4 1237 PQR5 1237 STU6 1237 VWX 请注意,这两列都不是唯一的. Fld1 = 0可能有很多行,但对于所有其他值,Fld1将是唯一的,并且可能有许多行具有Fld2的相同值.
我有一张这样的桌子
Fld1   Fld2  Fld3
------------
0      1234  ABC
0      1235  DEF
1      1236  GHI
2      1236  JKL
3      1236  MNO
4      1237  PQR
5      1237  STU
6      1237  VWX

请注意,这两列都不是唯一的. Fld1 = 0可能有很多行,但对于所有其他值,Fld1将是唯一的,并且可能有许多行具有Fld2的相同值.

我需要为Fld2的每个值选择一行,其中Fld 1中的值最高.因此基于上述数据的结果将是

Fld1    Fld2   Fl4
------------------
0       1234   ABC
0       1235   DEF
3       1236   MNO 
6       1237   VWX

解决方法

GROUP BY的替代方法是使用像 row_number()这样的窗口函数来获得结果.此函数通过Fld2对数据进行分区并通过Fld1 desc对其进行排序来创建唯一编号:
select Fld1,Fld2,Fld3
from
(
  select Fld1,Fld3,rn = row_number() over(partition by fld2 order by fld1 desc)
  from yourtable
) d
where rn = 1;

请参阅SQL Fiddle with Demo.如果您有其他唯一的列,有时使用row_number会更容易.这给出了一个结果:

| Fld1 | Fld2 | Fld3 |
|------|------|------|
|    0 | 1234 |  ABC |
|    0 | 1235 |  DEF |
|    3 | 1236 |  MNO |
|    6 | 1237 |  VWX |

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读