Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2014, 19:30   #1
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию Существующий формула из Excel перевести на языке SQL

Здравствуйте ребята . есть экселевский файл, на него есть один "вычисляемый поля" формула который там есть можно почитать да. Я хочу делать такой вычисляемый поля в СУБД MS SQL но получаю неправильный результат и прошу помощь пожалуйста

Formul.rar это файл Excel и там есть это формула

1. Для тест создаю таблицу

Код:
create table test1
(
id int identity,
B integer,
C integer,
D integer, 
E integer,
F integer
)
2. набиваю тоже самое число как на Excel
3. Хочу делать такой вычисление . Но результате получаю неправильный
Код:
select * , suum =B/6*C*D+E*F+C+E*D+F
from  test1
4. А если запросе делаю круглое кавычки --> ( ) получаю везде 0

Код:
select * , suum =B/6*(C*D+E*F+(C+E)*(D+F))
from  test1
Вопрос: Как написать правильно в SQL - е что бы получить точно такой результат как в Excel ?
Изображения
Тип файла: jpg FormEXcel.jpg (112.2 Кб, 99 просмотров)
Тип файла: jpg FormExcelSQL.jpg (29.0 Кб, 46 просмотров)
Тип файла: png FormKavichSQL.png (7.6 Кб, 39 просмотров)
Вложения
Тип файла: rar Formul.rar (7.7 Кб, 8 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 12.06.2014, 20:22   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А просто запросом такое поле не тянется разве? Из 2003-го провайдером Jet.OLEDB.4.0 без проблем

А, дошло в MS SQL
Код:
select *,B/6*(C*D+E*F+(C+E)*(D+F)) AS MyField from  test1
поскольку все поля int, то результат тоже int будет. И имей в виду деление на 0 и 5/6=0

Чтобы 5/6 не было нулем можно так например
Код:
select *,B*1.000/6*(C*D+E*F+(C+E)*(D+F)) AS MyField from  test1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.06.2014 в 20:30.
Аватар вне форума Ответить с цитированием
Старый 12.06.2014, 20:32   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ну так тип то целочисленный выставили
eval вне форума Ответить с цитированием
Старый 12.06.2014, 20:45   #4
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Ребята огромное спасибо . Можно как то еще поправить что результат получили такой как на Excel ??? смотрите результат чуть не то
Изображения
Тип файла: jpg s2.jpg (34.0 Кб, 37 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 12.06.2014, 20:53   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Или преобразовать это int на другом тип, или изменить тип поля . Но как то что результат точно такой . Можно как то ?
xxbesoxx вне форума Ответить с цитированием
Старый 12.06.2014, 21:00   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Округляй результат ROUND-ом
Можно CAST-ом преобразовать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.06.2014 в 21:05.
Аватар вне форума Ответить с цитированием
Старый 12.06.2014, 21:10   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Как еще ошибка
Код:
select *, round( B*1.000/6*(C*D+E*F+(C+E)*(D+F)) ) AS MyField 
from  test1
-----------
Сообщение 189, уровень 15, состояние 1, строка 1
Функция round требует от 2 до 3 аргументов.
xxbesoxx вне форума Ответить с цитированием
Старый 12.06.2014, 21:42   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Аватар Огромное человечески спасибо . Да через CAST получается точны результат
Код:
select *, cast(B*1.000/6*(C*D+E*F+(C+E)*(D+F)) as decimal(19)) AS MyField 
from  test1
Изображения
Тип файла: jpg s3.jpg (42.5 Кб, 34 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 13.06.2014, 00:26   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Да через CAST получается точны результат
а зачем тут CAST ?
eval вне форума Ответить с цитированием
Старый 13.06.2014, 02:23   #10
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

eval Я же изначально писал что хочу точно такой результат вычисления как на Excel понимайте ? и добиться на это помогло меня Аватар и потом Функции CAST и преобразование тип integer на decimal(19) понимайте ?

Последний раз редактировалось xxbesoxx; 13.06.2014 в 02:41.
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формула Excel Naumi4 Microsoft Office Excel 2 07.06.2013 13:55
Перевести массив байтов в int и string на языке Си iukash Общие вопросы C/C++ 2 11.05.2012 10:09
Формула Excel FastWorm Microsoft Office Excel 18 30.07.2010 12:25
Формула в Excel ROBERT033 Microsoft Office Excel 2 22.02.2009 16:20
Формула на языке Pascal ViNcHeStEr Помощь студентам 9 03.07.2008 14:32