Нумерация крест применить строки - PullRequest
3 голосов
/ 02 июля 2019

Я хотел бы пронумеровать строки, созданные с помощью перекрестного применения. Допустим, у меня есть такой стол

key|value
---+-----
 1 |  A
 2 |  B

и я бегу

select * from t CROSS apply String_Split('x,y', ',')

Мне бы хотелось получить такой результат:

key|value|value|number
---+-----+-----+--------
 1 |  A  | x   |   1  
 1 |  A  | y   |   2  
 2 |  B  | x   |   1  
 2 |  B  | y   |   2  

Но я понятия не имею, как этого достичь; Также «номер» должен соответствовать заказу. Какие-нибудь подсказки? Предложения?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 02 июля 2019

Просто еще один вариант, если 2016+, это использовать JSON KEY.Это было бы незначительным +1 к КЛЮЧУ при необходимости

Пример

Declare @YourTable Table ([id] int,[value] varchar(50))  
Insert Into @YourTable Values 
 (1,'A')
,(2,'B')


Select A.*
      ,B.*
 From  @YourTable
 Cross Apply (
                SELECT [Key]
                      ,[value]
                FROM OPENJSON('["'+replace('x,y',',','","')+'"]')
             ) B

Возвращает

id  value   Key value
1   A       0   x
1   A       1   y
2   B       0   x
2   B       1   y

РЕДАКТИРОВАТЬ XML / 2014 версия

Select A.*
      ,B.*
 From  @YourTable A
 Cross Apply (
                Select RetSeq = row_number() over (order by 1/0)
                      ,RetVal = ltrim(rtrim(B.i.value('(./text())[1]', 'varchar(max)')))
                From  (Select x = Cast('<x>' + replace('x,y',',','</x><x>')+'</x>' as xml)) as A 
                Cross Apply x.nodes('x') AS B(i)
             ) B
1 голос
/ 02 июля 2019

Вы также можете использовать CTE.В CTE я добавил строковый номер детали с помощью row_number () над константой (чтобы он не упорядочивался ни по одному столбцу и генерировал числа в исходном естественном порядке).

with string_values as (
  select row_number() over (order by (select 0)) as number,
         value
  from string_split('X,Y', ',')
)
select * from t cross join string_values

PS: Поискдля SQL Split String, и вы найдете множество функций для замены split_string в SQL Server 2014.

...