Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/53: Рейтинг темы: голосов - 53, средняя оценка - 4.85
Milo4ka
0 / 0 / 0
Регистрация: 18.05.2009
Сообщений: 7
1

Вычисляемое поле по условию

18.05.2009, 15:49. Просмотров 9612. Ответов 16
Метки нет (Все метки)

Всем добрый день!

Подскажите пожалуйста, как правильно написать запрос к таблице T:

"Если значение поля T.1 = '200' то выводить поле Т.2, а если значение поле Т.1 = '300', то выводить Т.2/30 (Значение разделить на 30)".

Нужно вывести либо одно либо другое в один столбец.
Поле Т.2 текстовое! Т.е. надо преобразовать в строку + выводить значение по условию.


Спасибо заранее!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2009, 15:49
Ответы с готовыми решениями:

вычисляемое поле
Создал такой запрос: Select d.номер_договора, g.дата_очередного_платежа,...

Вычисляемое поле
Тривиальная задача... переношу базу access 2010 на SQL сервер 2008. В аксе...

Вычисляемое поле
Добрый вечер, уважаемые программисты! Сегодня столкнулся с непонятной для меня...

Вычисляемое поле
Такой вопрос, у меня в табличке есть вычисляемое поле. Его значение вычисляется...

Вычисляемое поле и NULL
Создаю некий запрос типа SELECT *, Column1*100+20 FROM table1 Column1 в...

16
БурундукЪ
9556 / 2559 / 83
Регистрация: 17.02.2009
Сообщений: 10,364
18.05.2009, 15:55 2
T-SQL
1
2
3
4
5
select case T.1
when '200' then cast(Т.2 as numeric) 
when '300' then cast(Т.2 as numeric)/30 
end as t2
from T
вместо нумерика мот быть любой другой числовой тип
1
Milo4ka
0 / 0 / 0
Регистрация: 18.05.2009
Сообщений: 7
18.05.2009, 18:05  [ТС] 3
Спасибо большое!

По ходу дела возник такой вопрос:
Мне нужно преобразовать указанное поля типа "строка" в тип DECIMAL.
Поле T.2 текстовое, и при преобразовании происходит переполнение (т.к. значения получаются типа 156.654444444444444(4)
Не подскажете, как при конвертации в число оставить после запятой, например, 2 знака?
0
БурундукЪ
9556 / 2559 / 83
Регистрация: 17.02.2009
Сообщений: 10,364
18.05.2009, 18:07 4
Цитата Сообщение от Milo4ka Посмотреть сообщение
как при конвертации в число оставить после запятой, например, 2 знака?
T-SQL
1
round(digitField,2)
0
Milo4ka
0 / 0 / 0
Регистрация: 18.05.2009
Сообщений: 7
19.05.2009, 11:15  [ТС] 5
ДОбрый день!

Использую ROUND, получается следующее:

вместо 156,65444444444444(4) получается 156,65000000000000000

а нет ли такого оператора, который может "обрезать" знаки до 2-х после запятой, не заменяя их нулями? То есть, можно ли получить значение 156,65 ?
0
БурундукЪ
9556 / 2559 / 83
Регистрация: 17.02.2009
Сообщений: 10,364
19.05.2009, 11:38 6
в какой DECIMAL Вы конвертите?

структура DECIMAL(точность,размер)
так вот второе число и отвечает за кол-во цифр после запятой

Не по теме:

почему не точность (precision), а размер (scale) сказать не могу, может так исторически сложилось )))

0
Milo4ka
0 / 0 / 0
Регистрация: 18.05.2009
Сообщений: 7
19.05.2009, 12:42  [ТС] 7
Использую DECIMAL (15,2)

Пишу
cast (T.1 as DECIMAL(15,2))
получается число вида: 123,3333333333(3)

Пробую еще так:
round (cast (T.1 as DECIMAL(15,2)) , 2)
получаю то же самое...

как вместо 123,333333(3) получить 123,33?
0
БурундукЪ
9556 / 2559 / 83
Регистрация: 17.02.2009
Сообщений: 10,364
19.05.2009, 13:02 8
Вот что написано в SQL Server Book Online
p (precision)
Specifies the maximum total number of decimal digits that can be stored, both to the left and to the right of the decimal point. The precision must be a value from 1 through the maximum precision. The maximum precision is 28 unless the server is started with the /p parameter of sqlservr. If the /p parameter is specified, the maximum precision is 38; therefore, 0 < p <=38.
s (scale)
Specifies the maximum number of decimal digits that can be stored to the right of the decimal point. Scale must be a value from 0 through p. The default scale is 0; therefore, 0 <= s <= p. Maximum storage sizes vary, based on the precision.
precision нас особо не интересует, потому что это показатель всех цифр (справа и слева от десятичной точки), а вот scale - задает макс. кол-во цифр, которые могут быть размещены справа (т.е. после) десятичного разделителя.
0
koma_grusha
28 / 29 / 0
Регистрация: 17.04.2009
Сообщений: 73
25.05.2009, 16:29 9
DECIMAL (5,2)
1
БурундукЪ
9556 / 2559 / 83
Регистрация: 17.02.2009
Сообщений: 10,364
25.05.2009, 16:30 10
koma_grusha, а если 1233,33?
0
koma_grusha
28 / 29 / 0
Регистрация: 17.04.2009
Сообщений: 73
25.05.2009, 16:33 11
DECIMAL (6,2), но это все в тех случаях когда точно знаешь сколько цифр. Помимо DECIMAL есть тип NUMERIC
1
roamer
5 / 5 / 0
Регистрация: 08.05.2009
Сообщений: 42
25.05.2009, 17:07 12
А так ...
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE PROCEDURE MY_ROUND_2 (V DOUBLE PRECISION)
RETURNS (RES DOUBLE PRECISION)
AS 
   DECLARE VARIABLE I INTEGER;
  
BEGIN
  /* ROUND - emulation for 2 */ 
  /* Эмуляция  ROUND  для precis=2  */
  IF (V IS NULL) THEN V = 0;
  I = :V * 100;
  RES = :I/100;                          
  SUSPEND;
END
0
БурундукЪ
9556 / 2559 / 83
Регистрация: 17.02.2009
Сообщений: 10,364
25.05.2009, 17:17 13
roamer, это часом не MySQL?
0
roamer
5 / 5 / 0
Регистрация: 08.05.2009
Сообщений: 42
25.05.2009, 17:19 14
Interbase 5.5
Но принцип должен быть тот же, по идее ...
0
БурундукЪ
25.05.2009, 17:23
  #15

Не по теме:

Цитата Сообщение от roamer Посмотреть сообщение
Interbase 5.5
:swoon: а роздел-то SQL Server
то-то я смотрю шо операторы какие-то левые:rofl:

0
roamer
5 / 5 / 0
Регистрация: 08.05.2009
Сообщений: 42
25.05.2009, 17:57 16
Но смысл (сначала поделить на 100, а потом умножить) должен сработать.
Если сработает - сообщите, pls. Это полезнобудет знать.

Добавлено через 30 минут 42 секунды
Sorry. Наоборот. Сначала умножить, а потом поделить.
:-)
0
Milo4ka
0 / 0 / 0
Регистрация: 18.05.2009
Сообщений: 7
09.06.2009, 16:11  [ТС] 17
Спасибо всем большое!!

Я надолго уезжала, поэтому увидела сообщения только сейчас.

Обязательно попробую воспользоваться советами!
0
09.06.2009, 16:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2009, 16:11

Вычисляемое поле в таблице
Добрый день. Прошу помощи, так как я только начинаю изучать SQL Server,...

Создать вычисляемое поле Возраст
Всем привет! Как создать поле которое вычисляет возраст человека?

Вычисляемое поле с данными из другой таблицы
есть 2 таблицы: сотрудники (код сотрудника, оклад) и начисления зарплаты (код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru