需要在非规范化表中更新第一个非null field_x

时间:2014-06-06 05:43:24

标签: sql-server

我有下表,我必须与之合作。 SQL Fiddle

基本上,它是一种产品,可以为产品代码存储多达10个条形码(简化示例)。任何时候,这10个条形码字段中的任意数量都可能具有值。 我有另一个包含产品代码和条形码列表的表,需要将它们添加到产品条形码表中。

我需要执行更新,以便将barcodes_to_import中的任何条形码附加到product_barcode表中,并将其附加到第一个非空条形码列中。

table product_barcodes

product_Code    barcode_1  barcode_2  barcode_3 barcode_4  barcode_5
ABC             1          2          3
BCD             4          

table barcodes_to_import

product_code    barcode
ABC             7
BCD             8

预期产出:

product_Code    barcode_1  barcode_2  barcode_3 barcode_4  barcode_5
ABC             1          2          3         7
BCD             4          8

1 个答案:

答案 0 :(得分:0)

create table product_barcodes(product_Code varchar(10),barcode_1 int,barcode_2 int,barcode_3 int ,barcode_4 int,barcode_5 int,barcode_6 int,barcode_7 int,barcode_8 int,barcode_9 int,barcode_10 int)

create table barcodes_to_import(product_code varchar(10),barcode int)

- 插入的样本值如下

SELECT * FROM product_barcodes
 SELECT * FROM barcodes_to_import

- 输出查询

;与cte
 作为
 (
     选择product_code,data,col_name
     来自product_barcodes
     逆透视
     (
     col_name中的数据(
                barcode_1,barcode_2,barcode_3,barcode_4,barcode_5
                ,barcode_6,barcode_7,barcode_8,barcode_9,barcode_10
                        )
     )upvt

,CTE1
作为

    select *,ROW_NUMBER()OVER(PARTITION BY product_code ORDER BY col_name)as rn
    从
    (
    从cte
中选择product_code,data,col_name     工会全部     从barcodes_to_import中选择product_code,条形码,'barcode_z'作为col_name     )t

选择
    PRODUCT_CODE
    ,SUM(1)as barcode_1
    ,SUM([2])as barcode_2
    ,SUM([3])as barcode_3
    ,SUM([4])as barcode_4
    ,SUM([5])as barcode_5
    ,SUM([6])as barcode_6
    ,SUM([7])as barcode_7
    ,SUM([8])as barcode_8
    ,SUM([9])as barcode_9
    ,SUM([10])as barcode_10

来自cte1
PIVOT

    (1,[2],[3],[4],[5],[6],[7],[8],[9],[10]中的rn的AVG(数据)
)pvt
GROUP BY product_Code enter image description here