将其余列值放入相应的其他列中

时间:2017-05-04 05:50:07

标签: sql sql-server

我有一张表和这样的值

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

2 个答案:

答案 0 :(得分:1)

我注意到3列class Entity { List collection List getCollection() { return collection.unique() } } class Entity { List collection List getUniqueCollection() { return collection.unique() } } 的订单相同。 你可以连接3列并像这样替换

GTIN2, HIBC ,UPC

替换后的结果首先包含BARCODE_VALUE,因此请使用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 将其删除。
演示链接:http://rextester.com/PKTB64332
希望它有所帮助...

答案 1 :(得分: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