我有一列产品。在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
我已经使用while循环在sql server中编写了逻辑。但是实现逻辑要花费很多时间。而在我的桌子上,我的记录大约超过一千万。谁能帮我找到实现上述情况逻辑的有效方法。
答案 0 :(得分:0)
这看起来很棘手,但是您可以使用产品的累计总和来分配组,然后将产品分配给该组中的所有产品:
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%';
答案 1 :(得分:0)
与Gordon的解决方案略有不同。
注意::这假设每个产品都至少具有一个修饰符。
示例
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