Sql server 当数据重复时取其中一条

chenzhe014 2018-03-21 03:52:12
如果所示 当两条hotelId重复时,取hotelType=1 这一条。
...全文
559 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2018-03-21
  • 打赏
  • 举报
回复
如果HotelType=1是重复时,最小的Type值,也可以这样写,这样写的话不用做case when判断,会更好,当然得根据数据实际情况来定
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([HoteilId] nvarchar(21),[HotelType] int)
Insert #T
select N'A',2 union all
select N'A',1 union all
select N'B',2
Go
--测试数据结束
SELECT  t.HoteilId ,
        t.HotelType
FROM    ( SELECT    * ,
                    ROW_NUMBER() OVER ( PARTITION BY HoteilId ORDER BY HotelType) AS rn
          FROM      #T
        ) t
		WHERE rn=1
chenzhe014 2018-03-21
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([HoteilId] nvarchar(21),[HotelType] int)
Insert #T
select N'A',2 union all
select N'A',1 union all
select N'B',2
Go
--测试数据结束
SELECT  t.HoteilId ,
        t.HotelType
FROM    ( SELECT    * ,
                    ROW_NUMBER() OVER ( PARTITION BY HoteilId ORDER BY CASE
                                                              WHEN HotelType = 1
                                                              THEN 1
                                                              ELSE -1
                                                              END DESC ) AS rn
          FROM      #T
        ) t
		WHERE rn=1
谢谢版主~学习到了
二月十六 版主 2018-03-21
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([HoteilId] nvarchar(21),[HotelType] int)
Insert #T
select N'A',2 union all
select N'A',1 union all
select N'B',2
Go
--测试数据结束
SELECT t.HoteilId ,
t.HotelType
FROM ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY HoteilId ORDER BY CASE
WHEN HotelType = 1
THEN 1
ELSE -1
END DESC ) AS rn
FROM #T
) t
WHERE rn=1


34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧