我需要根据表格中可用的备份产品生成常见备份代码。以下是备份产品表:
if object_id('tempdb..#pdt') is not null
DROP TABLE #pdt
create table #pdt(ROW_NUM INT IDENTITY(1,1), PRODUCT NVARCHAR(30), PDT_CODE
NVARCHAR(10),BKP_PRODUCT NVARCHAR(30),BKP_PDT_CODE NVARCHAR(10))
INSERT #pdt( PRODUCT,PDT_CODE, BKP_PRODUCT,BKP_PDT_CODE )
VALUES ('HP','HP','DELL SERIES','DS'),('HP', 'HP','LENOVO NEW','LN'),
('DELL SERIES','DS','LENOVO NEW','LN'),
('DELL SERIES','DS','DELL SERIES GEN1','DG'),
('DELL SERIES','DS','DELL SERIES GEN1 NEW','DN'),
('SONY','SO','TOSHIBA','TO'),
('SONY','DS','ACER','AC')
INSERT #pdt(PRODUCT,PDT_CODE, BKP_PRODUCT,BKP_PDT_CODE )
VALUES ('APPLE','AP','APPLE','AP')
INSERT #pdt(PRODUCT,PDT_CODE, BKP_PRODUCT,BKP_PDT_CODE )
VALUES ('ACER','AC','APPLE','AP')
SELECT * FROM #pdt
ROW_NUM PRODUCT PDT_CODE BKP_PRODUCT BKP_PDT_CODE
----------- ------------------------------ ---------- ---------------------
--------- ------------
1 HP HP DELL SERIES DS
2 HP HP LENOVO NEW LN
3 DELL SERIES DS LENOVO NEW LN
4 DELL SERIES DS DELL SERIES GEN1 DG
5 DELL SERIES DS DELL SERIES GEN1 NEW DN
6 SONY SO TOSHIBA TO
7 SONY DS ACER AC
8 APPLE AP APPLE AP
9 ACER AC APPLE AP
这里备份关系是双向的。HP是DELL SERIES的备份,反之亦然。 我们需要为每个产品创建一个常用备份代码。此备份代码通过考虑所有备份组合(递归)来创建。 备份代码是所有备份的pdt_code的串联。以下是逻辑: 对于HP,备份是DELL SERIES。 但是DELL SERIES有LENOVO NEW、DELL SERIES GEN1、DELL SERIES GEN1 NEW作为备份。 因此,HP的备份代码是:HP+DS+LN+DG+DN = HPDSLNDGDN
对于DELL SERIES,备份是LENOVO NEW(第3行)。但是从第4行和第5行,我们还有备份DELL SERIES GEN1、DELL SERIES GEN1 NEW。 此外,DELL SERIES本身是HP的备份(第1行) 因此,DELL SERIES的备份代码与上面相同(因为所有都涉及,顺序不重要)=HPDSLNDGDN
类似地,我们需要为所有其他产品动态生成备用代码。备份代码串联的顺序不重要。
备注: 对于Apple,备份代码将只是AP,因为产品和bkp_product是相同的。 我正在使用SQL Server 2012。
以下是期望结果:
ROW_NUM PRODUCT PDT_CODE BKP_PRODUCT BKP_PDT_CODE BACKUP_CODE
----------- ------------------------------ ---------- ----------------------
1 HP HP DELL SERIES DS HPDSLNDGDN
2 HP HP LENOVO NEW LN HPDSLNDGDN
3 DELL SERIES DS LENOVO NEW LN HPDSLNDGDN
4 DELL SERIES DS DELL SERIES GEN1 DG HPDSLNDGDN
5 DELL SERIES DS DELL SERIES GEN1 NEW DN HPDSLNDGDN
6 SONY SO TOSHIBA TO SOTOACAP
7 SONY DS ACER AC SOTOACAP
8 APPLE AP APPLE AP AP
9 ACER AC APPLE AP ACAPSOTO
请帮我动态生成代码。
非常感谢。