Соединение значений столбца друг с другом - PullRequest
0 голосов
/ 24 июня 2019

У меня есть колонка продуктов. В столбце таблицы в SQL Server есть две категории: основной продукт и побочный продукт в качестве модификаторов. Я представляю основной продукт как P и Модификаторы как M здесь. У меня есть данные уровня транзакции, когда за одну транзакцию клиент купил несколько Продуктов с Модификаторами. Для одного продукта может быть несколько модификаторов. Просто для справки.

Sr No.    Products
1            P1
2            M1
3            M2
4            M3
5            P11
6            M11

Теперь я хочу сопоставить продукты с модификаторами. Каждый Модификатор относится к Продуктам над ним в столбце. Вывод, который мне нужен, как.

Product   Modifiers
P1          M1
P1          M2
P1          M3
P11         M11

Я уже написал логику на сервере sql, используя цикл while. Но на реализацию логики уходит много времени. В то время как в моей таблице у меня больше, чем крор записей. Может кто-нибудь помочь мне найти эффективный способ реализации логики для приведенного выше сценария.

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Небольшой поворот в решениях Гордона.

Примечание: Предполагается, что каждый продукт имеет хотя бы один модификатор.

Пример

Select *
 From  (
        Select Product = max(case when Products like 'P%' then Products end) over (Order by [Sr No.] )
              ,Modifiers = Products
         From YourTable
       ) A 
 Where Modifiers <> Product

Возвраты

Product Modifiers
P1      M1
P1      M2
P1      M3
P11     M11
0 голосов
/ 24 июня 2019

Это выглядит сложно, но вы можете назначить группу, используя совокупную сумму продуктов, а затем назначить продукт всем в этой группе:

select product, modifer
from (select max(case when product like 'P%' then product end) over (partition by grp) as product,
             product as modifier
      from (select t.*,
                   max(case when product like 'P%' then sr_no end) over (order by id) as grp
            from t
           ) t
     ) t
where modifier not like 'P%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...