T-SQL – 获取具有相同B组的所有As的列表
发布时间:2020-05-23 16:00:31 所属栏目:MsSql 来源:互联网
导读:我正在努力处理我正在尝试编写的棘手的SQL查询.看看下表: +---+---+| A | B |+---+---+| 1 | 2 || 1 | 3 || 2 | 2 || 2 | 3 || 2 | 4 || 3 | 2 || 3 | 3 || 4 | 2 || 4 | 3 || 4 | 4 |+---+---+ 现在,从这个表中,我基本上想要一个包含完全相同的B组的所有A
|
我正在努力处理我正在尝试编写的棘手的SQL查询.看看下表: +---+---+ | A | B | +---+---+ | 1 | 2 | | 1 | 3 | | 2 | 2 | | 2 | 3 | | 2 | 4 | | 3 | 2 | | 3 | 3 | | 4 | 2 | | 4 | 3 | | 4 | 4 | +---+---+ 现在,从这个表中,我基本上想要一个包含完全相同的B组的所有As的列表,并为每个集合提供递增ID. 因此,上述输出设置为: +---+----+ | A | ID | +---+----+ | 1 | 1 | | 3 | 1 | | 2 | 2 | | 4 | 2 | +---+----+ 谢谢. 编辑:如果有帮助,我有一个列表,列出了另一个表中可能出现的B的所有不同值. 编辑:非常感谢所有创新的答案.能够学到很多东西. 解决方法这是解决你的棘手选择的数学技巧:with pow as(select *,b * power(10,row_number()
over(partition by a order by b)) as rn from t)
select a,dense_rank() over( order by sum(rn)) as rn
from pow
group by a
order by rn,a
小提琴http://sqlfiddle.com/#!3/6b98d/11 这当然只适用于有限的不同计数,因为你会溢出.以下是字符串的更通用的解决方案: select a,dense_rank() over(order by (select '.' + cast(b as varchar(max))
from t t2 where t1.a = t2.a
order by b
for xml path(''))) rn
from t t1
group by a
order by rn,a
小提琴http://sqlfiddle.com/#!3/6b98d/29 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 我们应该升级到SQL Server 2005还是2008?
- 解决MYSQL连接端口被占引入文件路径错误的问题
- sql-server – 触发无限期WAITFOR会增加日志文件的大小吗?
- SQL / Sybase:SELECT … GROUP BY … NOT HAVING?
- sql-server – 如何将从datepart获得的数字转换为当天的名称
- sql – 在一个语句中选择两个表的连接中的第一行
- 如何优化/重构TSQL“LIKE”子句?
- sql-server – 获取SQL Server 2008中新插入行的主键
- sql – Oracle Julian的一年中的一天
- sql-server – 为什么在这种情况下忽略ConnectTimeout?
