2017-05-04 57 views
2

我有一个表和这样把列值的其余部分转换为相应的其他列

CREATE TABLE BarcodeTABLE 
( 
    ID INT IDENTITY, 
    BARCODE_VALUE nvarchar(max), 
    GTIN2 nvarchar(MAX), 
    HIBC NVARCHAR(max), 
    UPC nvarchar(max), 
    Others2 nvarchar(max) 
) 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('012,56', '012', '', '', '') 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('05,C50,25', 'C50', '25', '', '') 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('1,2,3', '1', '', '', '') 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('5,6,7', '', '', '7', '') 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('8,9,10', '', '9', '', '') 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('100,200,300', '100', '', '', '') 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('A12,12', '', 'A12', '', '') 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('B25,10', '', 'B25', '', '') 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('H65,26,0', 'H65', '', '', '') 

INSERT INTO BarcodeTABLE(BARCODE_VALUE, GTIN2, HIBC, UPC, OTHERS2) 
VALUES('H75,22,25', 'H75', '', '', '') 

我需要得到的输出值等的图像中示出,即,其中不存在中的值几列应该有在单独列图中所示,给我实现这一目标的最简单的方法:

enter image description here

+0

我不想回答分裂它,我只想把得到的值取不在其他列,请粘贴图片,你会得到这个想法,我清楚地说过,我在这里没有做任何事情。并且这些值已经可用,我只需要更新到Others2列这就是它 –

+0

你已经采取什么标准来获取别人的输出2列 – Rams

+0

更新BarcodeTABLE集其他2 =(案例 WHEN BARCODE_VALUE LIKE'%'+ GTIN2 + '%' THEN REPLACE(BARCODE_VALUE,GTIN2, '') WHEN BARCODE_VALUE LIKE '%' + HIBC + '%' THEN REPLACE(BARCODE_VALUE,HIBC, '') WHEN BARCODE_VALUE LIKE '%' + UPC +” %' THEN REPLACE(BARCODE_VALUE,UPC,'') ELSE BARCODE_VALUE END) –

回答

0
SELECT BARCODE_VALUE, 
CASE WHEN CHARINDEX(GTIN2 + ',', BARCODE_VALUE) > 0 OR CHARINDEX(',' + GTIN2, BARCODE_VALUE) > 0 THEN GTIN2 ELSE '' END AS 'GTIN2', 
CASE WHEN CHARINDEX(HIBC + ',', BARCODE_VALUE) > 0 OR CHARINDEX(',' + HIBC, BARCODE_VALUE) > 0 THEN HIBC ELSE '' END AS 'HIBC', 
CASE WHEN CHARINDEX(UPC + ',', BARCODE_VALUE) > 0 OR CHARINDEX(',' + UPC, BARCODE_VALUE) > 0 THEN UPC ELSE '' END AS 'UPC', 
CASE WHEN UPC = '' THEN 
    CASE WHEN HIBC = '' THEN 
     CASE WHEN GTIN2 = '' THEN 
      BARCODE_VALUE 
     ELSE REPLACE(REPLACE(BARCODE_VALUE, GTIN2 + ',', ''), ',' + GTIN2, '') END 
    ELSE REPLACE(REPLACE(CASE WHEN GTIN2 = '' THEN 
          BARCODE_VALUE 
         ELSE REPLACE(REPLACE(BARCODE_VALUE, GTIN2 + ',', ''), ',' + GTIN2, '') END, HIBC + ',', ''), ',' + HIBC, '') 
    END 
ELSE REPLACE(REPLACE(CASE WHEN HIBC = '' THEN 
         CASE WHEN GTIN2 = '' THEN 
          BARCODE_VALUE 
         ELSE REPLACE(REPLACE(BARCODE_VALUE, GTIN2 + ',', ''), ',' + GTIN2, '') END 
        ELSE REPLACE(REPLACE(CASE WHEN GTIN2 = '' THEN 
              BARCODE_VALUE 
             ELSE REPLACE(REPLACE(BARCODE_VALUE, GTIN2 + ',', ''), ',' + GTIN2, '') END, HIBC + ',', ''), ',' + HIBC, '') 
        END, UPC + ',', ''), ',' + UPC, '') 
END AS 'OTHERS2' 
FROM BarcodeTABLE 
1

我注意到,3列GTIN2, HIBC ,UPCBARCODE_VALUE订单相同。 你可以串联3列和替换这样

SELECT bt.ID, bt.BARCODE_VALUE, bt.GTIN2, bt.HIBC, bt.UPC, 
    reverse(STUFF(reverse(STUFF(replace(',' + bt.BARCODE_VALUE + ',', 
       ',' +IIF(bt.GTIN2 = '', '', bt.GTIN2 + ',') 
       + IIF(bt.HIBC = '', '', bt.HIBC+ ',') 
       + IIF(bt.UPC= '', '', bt.UPC+ ',') , ','), 1,1,'')),1,1,'')) AS Other2 
FROM dbo.BarcodeTABLE bt 

结果替换后有,在第一和最后一个,所以使用STUFF将其删除。
演示链接:http://rextester.com/PKTB64332
希望它可以帮助...

相关问题