2017-05-04 52 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
希望它可以幫助...

相關問題