我在论坛上搜索了一个问题,因为我没有找到一个问题,因此我开始了一个新主题
我有一个名为SubProduct
的表,其结构如下:
ProductCode | SubProduct | Unit
11470060 | 11470060.DSP | 12
11470060.DSP | 11470060.EA | 12
12110957 | 12110957.DSP | 12
12110957.DSP | 12110957.EA | 50
我需要得到这个结果,但我无法达到它:
Parent Child Unit
11470060 | 11470060.DSP | 12
11470060 | 11470060.EA | 144 (12 * 12)
12110957 | 12110957.DSP | 12
12110957 | 12110957.EA | 600 (12 * 50)
感谢您的帮助:)
答案 0 :(得分:0)
您需要标识父级,您可以使用字符串操作来完成。然后,您可以使用join
进行乘法。
以下内容以略有不同的形式返回您想要的内容:
with sp as (
select sp.*,
left(productcode, charindex('.', productcode + '.') - 1) as parent
from subproduct sp
)
select spd.parent, spd.unit * spe.unit,
spd.subproduct as dsp_subproduct, spe.subproduct as ea_subproduct
from sp spd join
sp spe
on spd.parent = spe.parent and
spd.subproduct like '%.DSP' and
spe.subproduct like '%.EA';
您可以使用apply
在单独的行上获取此信息:
with sp as (
select sp.*,
left(productcode, charindex('.', productcode + '.') - 1) as parent
from subproduct sp
)
select spd.parent, v.subproduct, v.unit
from sp spd join
sp spe
on spd.parent = spe.parent and
spd.subproduct like '%.DSP' and
spe.subproduct like '%.EA' outer apply
(values (spd.subproduct, spd.unit), (spe.subproduct, spd.unit * spe.unit) ) v(subproduct, unit);
Here是演示该解决方案的一个月。