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

T-SQL – 获取具有相同B组的所有As的列表

发布时间:2020-12-12 08:22:43 所属栏目: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组的所有As
我正在努力处理我正在尝试编写的棘手的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

(编辑:李大同)

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

    推荐文章
      热点阅读