我有下表,我必须与之合作。 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
答案 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