使用 Case 语句更新另一个 table
Using a Case statement to update another table
我有一个 table,其中有一条记录。我需要根据一条记录的 TYPE 列更新另一个 table 中的 8 个字段。我认为 Case 声明是可行的方法,但我正在拔出野兔!我已经搜索并看到了一些接近但不完全的例子!请帮忙!这是我的代码。
UPDATE [dbo].[PART_DIMENSION]
SELECT [SELL_PACK],
CASE q.PACK_TYPE WHEN 'SELL' then 1,
[SELL_PACK_UOM] = Q.PACK_ASSMBY,
[SELL_PACK_QTY] = Q.QTY,
[SELL_PACK_LENGTH] = Q.LENGTH,
[SELL_PACK_WIDTH] = Q.WIDTH,
[SELL_PACK_HEIGHT] = Q.HEIGHT,
[SELL_PACK_WEIGHT] = Q.WEIGHT,
[SELL_PACK_INNER_QTY] = Q.INNER_QTY,
[SELL_PACK_CAN_NEST] = Q.CAN_NEST,
[SELL_PACK_NEED_RETAIL_PACK] = Q.NEED_RETAIL_PACK
FROM PART_DIMENSION as a
INNER JOIN Qubiscan as q
on a.part_id=q.part_id
WHEN q.PACK_TYPE='INNER' then
SET[INNER_PACK] = 1,
[INNER_PACK_UOM] = Q.PACK_ASSMBY,
[INNER_PACK_QTY] = Q.QTY,
[INNER_PACK_LENGTH] = Q.LENGTH,
[INNER_PACK_WIDTH] = Q.WIDTH,
[INNER_PACK_HEIGHT] = Q.HEIGHT,
[INNER_PACK_WEIGHT] = Q.WEIGHT
FROM PART_DIMENSION as a
INNER JOIN Qubiscan as q
on a.part_id=q.part_id
WHEN q.PACK_TYPE='MASTER' then
SET[MASTER_PACK] = 1,
[MASTER_PACK_UOM] = Q.PACK_ASSMBY,
[MASTER_PACK_QTY] = Q.QTY,
[MASTER_PACK_LENGTH] = Q.LENGTH,
[MASTER_PACK_WIDTH] = Q.WIDTH,
[MASTER_PACK_HEIGHT] = Q.HEIGHT,
[MASTER_PACK_WEIGHT] = Q.WEIGHT
FROM PART_DIMENSION as a
INNER JOIN Qubiscan as q
on a.part_id=q.part_id
一次性完成所有事情是一个很好的目标,但有时您可能会尝试一次做太多事情。在这种情况下,CASE 可能不是最佳选择,因为做你想做的事情真的需要大约 24 个 CASE 语句......可行,但我不确定它的可读性如何。我建议首先将其分解为一些更简单的块..考虑一下(希望错别字最少 :)):
Update a
from part_dimension a
join qubiscan q
on a.part_id=q.part_id
set a.[MASTER_PACK] = 1,
a.[MASTER_PACK_UOM] = Q.PACK_ASSMBY,
a.[MASTER_PACK_QTY] = Q.QTY,
a.[MASTER_PACK_LENGTH] = Q.LENGTH,
a.[MASTER_PACK_WIDTH] = Q.WIDTH,
a.[MASTER_PACK_HEIGHT] = Q.HEIGHT,
a.[MASTER_PACK_WEIGHT] = Q.WEIGHT
where q.pack_type='MASTER'
对其他两个字段重复此块 lists/pack_types。
由于您正在寻找 SQL Server
版本的加入更新语句,您可以将更新分成三个不同的语句并执行如下操作:
--SELL
UPDATE p1
SET p1.[SELL_PACK] = 1
,p1.[SELL_PACK_UOM] = Q.PACK_ASSMBY
,p1.[SELL_PACK_QTY] = Q.QTY
,p1.[SELL_PACK_LENGTH] = Q.[LENGTH]
,p1.[SELL_PACK_WIDTH] = Q.WIDTH
,p1.[SELL_PACK_HEIGHT] = Q.HEIGHT
,p1.[SELL_PACK_WEIGHT] = Q.[WEIGHT]
,p1.[SELL_PACK_INNER_QTY] = Q.INNER_QTY
,p1.[SELL_PACK_CAN_NEST] = Q.CAN_NEST
,p1.[SELL_PACK_NEED_RETAIL_PACK] = Q.NEED_RETAIL_PACK
FROM [dbo].[PART_DIMENSION] p1
INNER JOIN Qubiscan AS q ON p1.part_id = q.part_id
WHERE q.pack_type = 'SELL';
--INNER
UPDATE p2
SET p2.[INNER_PACK] = 1
,p2.[INNER_PACK_UOM] = Q.PACK_ASSMBY
,p2.[INNER_PACK_QTY] = Q.QTY
,p2.[INNER_PACK_LENGTH] = Q.[LENGTH]
,p2.[INNER_PACK_WIDTH] = Q.WIDTH
,p2.[INNER_PACK_HEIGHT] = Q.HEIGHT
,p2.[INNER_PACK_WEIGHT] = Q.[WEIGHT]
FROM [dbo].[PART_DIMENSION] p2
INNER JOIN Qubiscan AS q ON p2.part_id = q.part_id
WHERE q.pack_type = 'INNER';
--MASTER
UPDATE p3
SET p3.[MASTER_PACK] = 1
,p3.[MASTER_PACK_UOM] = Q.PACK_ASSMBY
,p3.[MASTER_PACK_QTY] = Q.QTY
,p3.[MASTER_PACK_LENGTH] = Q.[LENGTH]
,p3.[MASTER_PACK_WIDTH] = Q.WIDTH
,p3.[MASTER_PACK_HEIGHT] = Q.HEIGHT
,p3.[MASTER_PACK_WEIGHT] = Q.[WEIGHT]
FROM [dbo].[PART_DIMENSION] p3
INNER JOIN Qubiscan AS q ON p3.part_id = q.part_id
WHERE q.pack_type = 'MASTER';
希望对您有所帮助!
我有一个 table,其中有一条记录。我需要根据一条记录的 TYPE 列更新另一个 table 中的 8 个字段。我认为 Case 声明是可行的方法,但我正在拔出野兔!我已经搜索并看到了一些接近但不完全的例子!请帮忙!这是我的代码。
UPDATE [dbo].[PART_DIMENSION]
SELECT [SELL_PACK],
CASE q.PACK_TYPE WHEN 'SELL' then 1,
[SELL_PACK_UOM] = Q.PACK_ASSMBY,
[SELL_PACK_QTY] = Q.QTY,
[SELL_PACK_LENGTH] = Q.LENGTH,
[SELL_PACK_WIDTH] = Q.WIDTH,
[SELL_PACK_HEIGHT] = Q.HEIGHT,
[SELL_PACK_WEIGHT] = Q.WEIGHT,
[SELL_PACK_INNER_QTY] = Q.INNER_QTY,
[SELL_PACK_CAN_NEST] = Q.CAN_NEST,
[SELL_PACK_NEED_RETAIL_PACK] = Q.NEED_RETAIL_PACK
FROM PART_DIMENSION as a
INNER JOIN Qubiscan as q
on a.part_id=q.part_id
WHEN q.PACK_TYPE='INNER' then
SET[INNER_PACK] = 1,
[INNER_PACK_UOM] = Q.PACK_ASSMBY,
[INNER_PACK_QTY] = Q.QTY,
[INNER_PACK_LENGTH] = Q.LENGTH,
[INNER_PACK_WIDTH] = Q.WIDTH,
[INNER_PACK_HEIGHT] = Q.HEIGHT,
[INNER_PACK_WEIGHT] = Q.WEIGHT
FROM PART_DIMENSION as a
INNER JOIN Qubiscan as q
on a.part_id=q.part_id
WHEN q.PACK_TYPE='MASTER' then
SET[MASTER_PACK] = 1,
[MASTER_PACK_UOM] = Q.PACK_ASSMBY,
[MASTER_PACK_QTY] = Q.QTY,
[MASTER_PACK_LENGTH] = Q.LENGTH,
[MASTER_PACK_WIDTH] = Q.WIDTH,
[MASTER_PACK_HEIGHT] = Q.HEIGHT,
[MASTER_PACK_WEIGHT] = Q.WEIGHT
FROM PART_DIMENSION as a
INNER JOIN Qubiscan as q
on a.part_id=q.part_id
一次性完成所有事情是一个很好的目标,但有时您可能会尝试一次做太多事情。在这种情况下,CASE 可能不是最佳选择,因为做你想做的事情真的需要大约 24 个 CASE 语句......可行,但我不确定它的可读性如何。我建议首先将其分解为一些更简单的块..考虑一下(希望错别字最少 :)):
Update a
from part_dimension a
join qubiscan q
on a.part_id=q.part_id
set a.[MASTER_PACK] = 1,
a.[MASTER_PACK_UOM] = Q.PACK_ASSMBY,
a.[MASTER_PACK_QTY] = Q.QTY,
a.[MASTER_PACK_LENGTH] = Q.LENGTH,
a.[MASTER_PACK_WIDTH] = Q.WIDTH,
a.[MASTER_PACK_HEIGHT] = Q.HEIGHT,
a.[MASTER_PACK_WEIGHT] = Q.WEIGHT
where q.pack_type='MASTER'
对其他两个字段重复此块 lists/pack_types。
由于您正在寻找 SQL Server
版本的加入更新语句,您可以将更新分成三个不同的语句并执行如下操作:
--SELL
UPDATE p1
SET p1.[SELL_PACK] = 1
,p1.[SELL_PACK_UOM] = Q.PACK_ASSMBY
,p1.[SELL_PACK_QTY] = Q.QTY
,p1.[SELL_PACK_LENGTH] = Q.[LENGTH]
,p1.[SELL_PACK_WIDTH] = Q.WIDTH
,p1.[SELL_PACK_HEIGHT] = Q.HEIGHT
,p1.[SELL_PACK_WEIGHT] = Q.[WEIGHT]
,p1.[SELL_PACK_INNER_QTY] = Q.INNER_QTY
,p1.[SELL_PACK_CAN_NEST] = Q.CAN_NEST
,p1.[SELL_PACK_NEED_RETAIL_PACK] = Q.NEED_RETAIL_PACK
FROM [dbo].[PART_DIMENSION] p1
INNER JOIN Qubiscan AS q ON p1.part_id = q.part_id
WHERE q.pack_type = 'SELL';
--INNER
UPDATE p2
SET p2.[INNER_PACK] = 1
,p2.[INNER_PACK_UOM] = Q.PACK_ASSMBY
,p2.[INNER_PACK_QTY] = Q.QTY
,p2.[INNER_PACK_LENGTH] = Q.[LENGTH]
,p2.[INNER_PACK_WIDTH] = Q.WIDTH
,p2.[INNER_PACK_HEIGHT] = Q.HEIGHT
,p2.[INNER_PACK_WEIGHT] = Q.[WEIGHT]
FROM [dbo].[PART_DIMENSION] p2
INNER JOIN Qubiscan AS q ON p2.part_id = q.part_id
WHERE q.pack_type = 'INNER';
--MASTER
UPDATE p3
SET p3.[MASTER_PACK] = 1
,p3.[MASTER_PACK_UOM] = Q.PACK_ASSMBY
,p3.[MASTER_PACK_QTY] = Q.QTY
,p3.[MASTER_PACK_LENGTH] = Q.[LENGTH]
,p3.[MASTER_PACK_WIDTH] = Q.WIDTH
,p3.[MASTER_PACK_HEIGHT] = Q.HEIGHT
,p3.[MASTER_PACK_WEIGHT] = Q.[WEIGHT]
FROM [dbo].[PART_DIMENSION] p3
INNER JOIN Qubiscan AS q ON p3.part_id = q.part_id
WHERE q.pack_type = 'MASTER';
希望对您有所帮助!