我有一张表和这样的值
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', '', '', '')
我需要获得如图所示的输出,即如图中所示,在单独的列中应该存在几列中不存在的值,为我提供最简单的方法:
答案 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