首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql-server划分为组。

sql-server划分为组。
EN

Stack Overflow用户
提问于 2017-10-18 18:02:09
回答 1查看 71关注 0票数 3

我有以下数据

代码语言:javascript
复制
CREATE TABLE customers (ID INT, rankVal INT);
GO

INSERT INTO dbo.customers( ID, rankVal )
VALUES  ( 1, -- ID - int
          1  -- rankVal - int
          ),
          ( 1, -- ID - int
          2 -- rankVal - int
          ),
          ( 2, -- ID - int
          1  -- rankVal - int
          ),
          ( 2, -- ID - int
          2  -- rankVal - int
          ),


          ( 3, -- ID - int
          1  -- rankVal - int
          ),
          ( 3, -- ID - int
          3 -- rankVal - int
          ),
          ( 4, -- ID - int
          1  -- rankVal - int
          ),
          ( 4, -- ID - int
          3  -- rankVal - int
          );

我想把我的顾客分成几个组。例如,客户1和2的等级完全相同,它们必须在一个组中,客户3和4必须在不同的组中。预期结果如下

代码语言:javascript
复制
Grp  costumerID
---- -----------
gr1  1
gr1  2
gr2  3
gr2  4
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-18 18:07:44

您可以使用STRING_AGG ( Server 2017及以上)获取一个级别的所有级别,然后使用DENSE_RANK来计算组号:

代码语言:javascript
复制
WITH cte AS (
  SELECT ID, STRING_AGG(rankVal,',') WITHIN GROUP (ORDER BY rankVal) AS s
  FROM customers
  GROUP BY ID
)
SELECT CONCAT('grp', DENSE_RANK() OVER(ORDER BY s)) AS GRP, ID AS customerID
FROM cte;

DBFiddle演示

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46816440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档