2014-02-06 4 views
0

У меня есть требование заполнить все поля NULL с помощью DEL. Я не хочу изменять таблицы базы данных, я просто хотел бы сделать это в столбце. Ниже я пытаюсь сделать это прямо сейчас. В принципе, если значение не равно нулю, я хочу 132.00. Если он равен нулю, я хочу увидеть DEL. Я работаю над SQL 2008 R2. Благодарим вас за вашу помощь.SQL Использование текста и десятичного числа в том же столбце

Текущая мысль

CASE WHEN [Sales] IS NOT NULL 
    THEN CAST([Sales] AS decimal(10,0)) 
    ELSE 'DEL' 
END AS Sales 

Ошибка

Ошибка преобразования типа данных VARCHAR в числовой.

Warning: Null value is eliminated by an aggregate or other SET operation. 
+0

Какова таблица продаж? И DEL - это столбец или строковое значение? –

+1

Продажи - это Int и DEL - строка – user2100632

ответ

1
CASE WHEN [Sales] IS NOT NULL 
    THEN CAST(CAST([Sales] AS decimal(10,0)) AS NVARCHAR(1000)) 
    ELSE CAST(DEL AS NVARCHAR(1000)) 
END AS Sales 

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

EDIT

Чтобы вернуть строку DEL если продажи является недействительным вы можете сделать

CASE WHEN [Sales] IS NOT NULL 
    THEN CAST(CAST([Sales] AS decimal(10,0)) AS NVARCHAR(1000)) 
    ELSE 'DEL' 
END AS Sales 
+0

DEL - это не столбец, так как я прошу о комментариях, это строка. –

+0

вы возвращаете строку '' DEL'', если продажи равны нулю? –

+0

Да, я пытаюсь вернуть DEL, если его null. Извините, я пропустил это в вопросе выше. – user2100632

1

Вы не магазин текст «DEL» в колонке определяется для хранения десятичных знаков может. Это просто невозможно. Более того, вы не должны хранить десятичные значения в столбцах, определенных для хранения строк. Другими словами, это требование является обратным и неправильным.

Что вы можете сделать, это продолжать сохранять NULL и десятичные данные, как у вас есть раньше, и просто возвращать строковые данные для отображения:

CASE WHEN [sales] IS NULL THEN 'DEL' ELSE Convert(varchar(13), [sales]) END 

Однако это также меньше, чем идеал, так как она заставляет ваш базы данных, чтобы выполнить работу по преобразованию, и означает, что ваш клиентский код начинает работать со строками, а не цифрами. Лучший вариант заключается в том, чтобы база данных продолжала работать с необработанными данными в том виде, в каком она есть, и сделать настройку на изменение NULL на «DEL» в вашем клиентском коде .

Смежные вопросы