SQL Multiplication - запрос на обновление - PullRequest
0 голосов
/ 07 сентября 2011

SQL 2008 - Простая логика запросов.

В моей таблице: TableName, у меня есть 3 столбца [Кол-во кораблей], Размер, Кол-во.

Значением по умолчанию для Qty является NULL. Я написал запрос на обновление для обновления столбца: кол-во. Мне нужно умножить [Кол-во кораблей] * Размер.

Колонка: Размер 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. Мой запрос вызывает исключение.

Ответы [ 2 ]

1 голос
/ 07 сентября 2011

Плохой / странный дизайн, но за что, надеюсь, одноразовое исправление;

;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
1 голос
/ 07 сентября 2011

У вас есть несколько проблем:

  • Первое: мне кажется, что ваше умножение может вернуть число с плавающей запятой, и все же ваш столбец QTY выглядит как целое число
  • Секунда (определенно проблема): вы конвертируете столбец Size, в котором есть строки, с плавающей точкой.Как вы ожидаете, что это сработает?
  • В-третьих: Почему у вас есть два столбца QTY в ваших данных примера?Где находится Колонка QTY для корабля, на которую вы ссылаетесь?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...