【问题标题】:Putting rest of the column values into a corresponding other column将其余列值放入相应的其他列
【发布时间】:2017-05-04 16:11:37
【问题描述】:

我有一个像这样的表格和值

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', '', '', '')

我需要得到如图所示的输出,即少数列中不存在的值应该存在于图中所示的单独列中,给我最简单的方法来实现这一点:

【问题讨论】:

  • 我不想回答拆分它,我只想把结果值放在其他列中,请检查粘贴的图片,你会明白的,我清楚地说,我是没有对拆分做任何事情。并且这些值已经可用,我只需要更新到 Others2 列即可
  • 获取 others2 列输出的标准是什么
  • update BarcodeTABLE set Others2=(case 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)
  • 但这不能按我的需要正常工作

标签: sql sql-server


【解决方案1】:

我注意到GTIN2, HIBC ,UPC 的 3 列与BARCODE_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
希望对您有所帮助...

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 2022-01-21
      • 2021-05-21
      • 2022-10-23
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多