查找并分类不同组的顺序模式T-SQL

时间:2017-08-26 20:43:11

标签: sql sql-server tsql sql-server-2012

我需要帮助查找和分类每个不同密钥的顺序模式。

根据我的数据,我需要创建一个新表,其中包含密钥和属于该密钥的模式标识符。

从下面的示例中,模式如下:

  

键#1和#3的值为1,2和3.键#3的值为8,   当密钥I.E(1,2,3)I存在明显的模式时   需要在表上为键#和特定的键创建一个条目   模式(1,2,3)

数据:

key          value
1            1
1            2
1            3
2            8
2            9
2            10
3            1
3            2
3            3

预期产出:

key          pattern
1            1
2            2
3            1

小提琴: http://sqlfiddle.com/#!6/4fe39

示例表:

CREATE TABLE yourtable
    ([key] int, [value] int)
;

INSERT INTO yourtable
    ([key], [value])
VALUES
  (1, 1),
  (1, 2),
  (1, 3),
  (2, 8),
  (2, 9),
  (2, 10),
  (3, 1),
  (3, 2),
  (3, 3)
;

1 个答案:

答案 0 :(得分:1)

您可以通过多种方式将值连接在一起。 SQL Server中的传统方法使用for xml

select k.key,
       stuff( (select ',' + cast(t.id as varchar(255))
               from t
               where k.key = t.key
               for xml path ('')
               order by t.id
              ), 1, 1, ''
            ) as ids
from (select distinct key from t) k;

您可以使用CTE /子查询将其转换为唯一编号:

with cte as (
      select k.key,
             stuff( (select ',' + cast(t.id as varchar(255))
                     from t
                     where k.key = t.key
                     for xml path ('')
                     order by t.id
                    ), 1, 1, ''
                  ) as ids
      from (select distinct key from t) k
     )
select cte.*, dense_rank() over (order by ids) as ids_id
from cte;