我正在使用的数据库是SQL Server 2022.
我有一张桌子,上面有像1010080PC这样的商品编号,以C结尾. 我也有类似1010080或1010080P的项目(末尾没有C),如果ItemNr中的项目编号不是以C结尾,我想将项目1010080PC添加到最后一列GuaranteeItem
MATNR | GuaranteeItem |
---|---|
1010080 | 1010080PC |
1010080P | 1010080PC |
1010080PC | (empty) |
由于1010080PC已经以C结尾,我不想在最后一栏中输入任何内容.
该表大约有170,000行,其中大约有10行.1,700有一项以C结尾. 我预计大约需要编辑3,400行
这就是我想要的结果:
MATNR | GuaranteeItem |
---|---|
1010010 | |
1010021 | |
1010031P | 1010031PC |
1010031PC | |
1010040 | |
1010061 | |
1010070 | |
1010080 | 1010080PC |
1010080PC | |
1011010 | |
1011021 | |
1011030 | |
1017511 | |
1017530 | |
1017531 | |
1017592 | 1017592PC |
1017592P | 1017592PC |
1017592PC | |
1017611 | |
1017821 | |
1017941 | |
1017951 | |
1017961 | 1017961PC |
1017961P | 1017961PC |
1017961PC | |
1017981 |
我已经为这个问题斗争了一段时间,但我一直没有找到一个可行的解决方案. 我所做的工作如下
我只用以‘C’结尾的ItemNr做了一个试探表
SELECT DISTINCT
prd.MARA.MATNR
INTO prd.TempTable
FROM
prd.MARA
WHERE
prd.MARA.MATNR LIKE '%C'
接下来,我try 将ItemNr+‘%C’与临时表中的ItemNr匹配.如果临时表中存在ItemNr+‘%C’,则将临时表中的ItemNr添加到列GuaranteeItem
SELECT DISTINCT
prd.MARA.MATNR
, CASE
WHEN CONCAT(prd.MARA.MATNR, '%C') IN (SELECT prd.TempTable.MATNR FROM prd.TempTable) THEN prd.TempTable.MATNR
WHEN prd.MARA.MATNR LIKE '%C' THEN ''
ELSE ''
END AS GuaranteeItem
FROM
prd.MARA
LEFT JOIN
prd.TempTable ON prd.TempTable.MATNR = prd.MARA.MATNR
不知怎么的,我配不上WHEN CONCAT(prd.MARA.MATNR, '%C') IN (SELECT prd.TempTable.MATNR FROM prd.TempTable) THEN
任何解决这个问题的建议都将受到我们的感激.