SQL 2008 - 简单查询逻辑。
在我的表:TableName中,我有3列[出货量],尺寸,数量。
Qty的默认值为NULL。我写了一个更新查询来更新列:数量。我需要乘以[Ship Qty] * Size。
列:大小为nvarchar。它带有两个条件
1)如果值为60 EA或3 ML,我只需要考虑60或3或3.5 ......
2)如果值为60X3 ML,我需要考虑60X3,即180.然后,这个乘积值将乘以[Ship Qty]。
update [TableName]
set Qty = [Ship Qty] * CONVERT(INT, (Size)) * CONVERT(Float, (Size))
WHERE Size > 0
AND Size > 0
AND Qty IS NULL
Ship Qty Size Qty
1 100 EA 100
3 60 EA 180
2 60X3ML 360
在上表中,Column:Qty通过SQL Query更新。我的查询抛出异常。
答案 0 :(得分:1)
你有几个问题:
答案 1 :(得分:1)
糟糕/奇怪的设计,但希望一次性修复;
;with TEST ([Ship Qty], Size) as (
select 1,'100 EA' union all
select 3,'60 EA' union all
select 2,'60X3ML' union all
select 2,'60X2ML' union all
select 2,'60' union all
select 2,'1 X3PP'
)
select
[Ship Qty],
Size,
[Ship Qty] * (
cast(substring(Size, 1, patindex('%[^0-9]%', Size + '/') - 1) as int)
*
case when charindex('X', Size, 1) > 0 then
cast(substring(substring(Size, charindex('X', Size) + 1, len(Size)), 1, patindex('%[^0-9]%', substring(Size, charindex('X', Size) + 1, len(Size)) + '/') - 1) as int)
else
1
end
)
from TEST
有关
Ship Qty Size (No column name)
1 100 EA 100
3 60 EA 180
2 60X3ML 360
2 60X2ML 240
2 60 120
2 1 X3PP 6