SQL в ведро номера - PullRequest
       6

SQL в ведро номера

0 голосов
/ 06 июля 2018

, поэтому я пытаюсь сложить рабочие дни в ведра, но я застреваю:

IF OBJECT_ID('mattexcel2') IS NOT NULL DROP TABLE mattexcel2 PRINT ' DROP TEMP TABLE'
SELECT * INTO mattexcel2 FROM SA_MASTER_BASE PRINT ' INSERT INTO TEMP TABLE'
GO
ALTER TABLE mattexcel2 ADD [Bucket] NVARCHAR(255) PRINT 'Bucket'
GO
UPDATE mattexcel2 SET [Bucket] = '0-3 Days' where [Business days in current Status] <= 3
GO

Когда я запускаю это в SQL, я получаю:

Не удалось выполнить преобразование при преобразовании значения nvarchar '1.91' в данные. введите int.

Итак, я хочу, чтобы 1,9 попал в столбец Bucket как 0-3 дня.

1 Ответ

0 голосов
/ 06 июля 2018

Как уже упоминалось в комментариях, проблема:

[Business days in current Status] <= 3

Поскольку [Business days in current Status] является строкой, ее необходимо преобразовать в число для сравнения. SQL Server выбирает целое число. Вы можете исправить это, используя десятичное число:

UPDATE mattexcel2
    SET [Bucket] = '0-3 Days' 
    WHERE try_convert(decimal(38, 4), [Business days in current Status]) <= 3.0;

Однако я бы предложил использовать вычисляемый столбец:

alter table mattexcel2
    add bd_bucket as (case when try_convert(decimal(38, 4), [Business days in current Status]) <= 3.0
                           then '0-3 Days'
                      end);

Вычисляемый столбец всегда будет иметь правильное значение без обновления.

...