Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Доброго времени суток всем)  [new]
nikolka
Member

Откуда:
Сообщений: 62
Никак не могу разобраться. подскажите, пожалуйста, как лучше сделать?
на форме Есть две Даты. еще Цена и Инфляция. мне нужно записать в таблицу в поле "цена с инфл" цену с учетом инфляцией по месяцам за период между этими датами. надеюсь, понятно объяснила) за ранее спасибо)
28 апр 13, 20:37    [14241356]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
qwerty112
Guest
nikolka
Никак не могу разобраться. подскажите, пожалуйста, как лучше сделать?
на форме Есть две Даты. еще Цена и Инфляция. мне нужно записать в таблицу в поле "цена с инфл" цену с учетом инфляцией по месяцам за период между этими датами. надеюсь, понятно объяснила) за ранее спасибо)

Да ! блестяще !
давай "на бис", ещё раз ! с учётом рекомендаций п.6
28 апр 13, 21:06    [14241452]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
nikolka
Member

Откуда:
Сообщений: 62
qwerty112,

извините, но я не поняла, что Вас конкретно не устроило?
28 апр 13, 21:18    [14241475]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
Он_самый
Guest
nikolka
как лучше сделать?
Ольга, делайте что умеете и делайте как умеете.
И надо писать не Информатик-Экономист, а Экономист-Информатик. Или с экономикой хуже чем с программированием?
И зачем так много скобок-улыбочек? Не только за улыбочки же работать на вас будем, глазки покажите, свои красивые)))))
nikolka
мне нужно записать в таблицу
А оно вам нжуно? Может надо получить запросом эти даные, хранить то зачем?
nikolka
Есть две Даты. еще Цена и Инфляция. ... понятно объяснила)
А, улыбочка означает - риторичность вопроса, мол "естественно что нет" (в голове же бардак, лёгкая форма аутирования или сделалай то незнаю что)?!
А даты означают дату рожения и дату свадьбы?
nikolka
"цена с инфл" - цена с учетом инфляцией по месяцам за период между датами
Ага, ещё один пример, что в экономике цифры из пальца высосаны.
Вам по линейной шкале считай или какой-то апроксиматической (гладкой)?

Может я неправильно понял, но вот что есть.
1. Таблица инфляции, с шагом в месяц (табличка-справочник)
2. Цена и дата её расчёта (другая табличка или параметры в запросе)
3. Инерактивно, на введённую дату получить инляционную цену (запросик).

И последнее: причём ту MS SQL? Какой судьбой сюда, мадам, вас занесло?
28 апр 13, 21:27    [14241491]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31425
nikolka
qwerty112,

извините, но я не поняла, что Вас конкретно не устроило?
Непонятно, что вы хотите. С выполнением
рекомендаций п.6 было бы легче понять им помочь.
28 апр 13, 21:29    [14241495]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
nikolka
Member

Откуда:
Сообщений: 62
alexeyvg,
ну извините, новичок!
28 апр 13, 21:38    [14241517]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
nikolka
Member

Откуда:
Сообщений: 62
в смысле, я новичок
28 апр 13, 21:38    [14241520]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
nikolka
Member

Откуда:
Сообщений: 62
попробую еще раз. только сильно не пинайте
я просто подумала, что можно это можно запросом в цикле сделать, поэтому и написала в этот раздел.

на заданном промежутке времен (ДатаНачала = 01.01.2013 и ДатаОкончания = 15.03.2013) и начального значения цены (например, 100) с темпом инфляции (5%) нужна таблица вида

цена     |100       |105       |110,25    |
месяц    |01.01.2013|01.02.2013|01.03.2013|
28 апр 13, 21:58    [14241577]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
nikolka,

1. сгенерируйте скрипт создания таблицы CREATE TABLE ... и выложите этот текст сюда в теге [SRС].
Это легко сделать в SQL Management Studio.
2. напишите скрипт заполнения этой таблицы тестовыми (то есть, необязательно настоящими) данными -
INSERT ... (список полей) SELECT список значений UNION ALL SELECT список значений ..... в теге [SRС]
3. приведите желаемый результат в табличном виде - тег [СSV]
4. напишите свой вариант решения задачи (естественно, неправильный! ) в теге [SRС]

Здесь не любят иждивенцев и лодырей...
28 апр 13, 22:09    [14241606]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
nikolka
Member

Откуда:
Сообщений: 62
Он_самый,

чувствую себя очень глупо. откуда информация обо мне?
28 апр 13, 22:34    [14241667]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
nikolka
Member

Откуда:
Сообщений: 62
Все оказалось проще, чем казалось)

while (DateStart < DateEnd) 
            {
                SqlDataSource1.InsertCommand = "INSERT into Prices (Price,period) VALUES ('" + Price+ "','" + DateStart + "')";
                SqlDataSource1.Insert();
                DateStart= DateStart.AddMonths(1);
                Price= Math.Round(Price* (infl / 100 + 1),2);
             }

Целые числа добавляет, но когда цена становится дробным числом, выдает ошибку при выполнении команды SqlDataSource1.Insert(); "Ошибка при преобразовании типа данных varchar к float."
тип столбца "Price" - float, переменной Price тоже. Подскажите, пожалуйста, в чем дело.
29 апр 13, 00:26    [14241864]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
nikolka
Member

Откуда:
Сообщений: 62
и вообще, рационально ли делать так? просто мне нужно оооочень много данных вносить таким образом. может есть какой-то более рациональный способ?
29 апр 13, 00:29    [14241868]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
Он_самый
Guest
А вы вообще до конца понимаете что вам нужно?
Дружеский совет: Не получается - не делай.

1. Главное я понял, что между "инфляцией по месяцам" стоит запятая. А оно правильно?
Ибо есть явно таблица по месяцам.
Судя по формуле и том что было сказано "на форме Есть поле Инфляция" непонятно, это инфляция за месяц? Она одинаковая? Может за год? Но тогда формула не вяжется.

2. Откройте для себя понятие "параметризованный запрос".
INSERT into Prices (Price,period) VALUES (@Price,@Date)


3. Не используйте тип Float. Вы экономист, вам запрещено использовать неточные типы (кроме одного очень редкого случая).
Используйте Decimal (и вообще вас должны были учить правилам приведения типов).

4. На вопрос "Зачем вставлять в таблицу", вы не ответили.
+
DECLARE	 @Amount	Money	= 123.45
	,@From		Date	= '20120301'
	,@To		Date	= '20120901'
DECLARE	@Inflation	TABLE (
	 [Percent]	Money	NOT NULL
	,[Month]	Date	PRIMARY KEY
)INSERT	@Inflation
SELECT * FROM (VALUES
 (0.50,'20120101')
,(0.37,'20120201')
,(0.58,'20120301')
,(0.31,'20120401')
,(0.52,'20120501')
,(0.89,'20120601')
,(1.23,'20120701')
,(0.10,'20120801')
,(0.55,'20120901')
,(0.46,'20121001')
,(0.34,'20121101')
,(0.54,'20121201')
) Inflation([Percent],[Month])

-- Через CTE
;WITH Product AS (
	SELECT	I.[Month], @Amount AS Amount
	FROM	@Inflation	I
	WHERE	I.[Month] = @From
UNION ALL
	SELECT	I.[Month], P.Amount * (1. + I.[Percent] / 100.)
	FROM	     Product	P
		JOIN @Inflation	I ON I.[Month] = DateAdd(Month,1,P.[Month])
	WHERE	I.[Month] <= @To
)	SELECT	*
	FROM	Product

-- Одним запросом (2012 + гразный хак)
SELECT	*, @Amount * Exp(Sum(Log(1. + I.[Percent] / 100.))OVER(ORDER BY I.[Month]))
FROM	@Inflation	I
WHERE	    @From >  I.[Month]
	AND @To   <= I.[Month]

5. А даты можно любые вносить? А если надо показать с 19.03.2011 по 29.03.2013?

+
Картинка с другого сайта.
Так с этим форумом.


PS:
nikolka
откуда информация обо мне?
Молодец что поправила, но в принципе это не важно.
29 апр 13, 05:54    [14242015]     Ответить | Цитировать Сообщить модератору
 Re: Доброго времени суток всем)  [new]
nikolka
Member

Откуда:
Сообщений: 62
спасибо большое) справилась так


SqlCommand cmd = new SqlCommand(
  "begin tran\n" +
  "while @DateStart <= @DateEnd begin\n" +
  "INSERT into Prices (period, Price)\n" +
  "select DATEADD(day,(-DATEPART(day, @DateStart)+1),@DateStart), @Price\n" +
  "select @Price = Round(@Price* (@Infl / 100 + 1), 2)\n" +
  "select @DateStart = dateadd(month, 1, @DateStart)\n" +
  "end; commit;", connection);
            cmd.Parameters.Add(new SqlParameter("@DateStart", DateStartOPU));
            cmd.Parameters.Add(new SqlParameter("@DateEnd", DateEndOPU));
            cmd.Parameters.Add(new SqlParameter("@Price", Vyruchka));
            cmd.Parameters.Add(new SqlParameter("@Infl", infl));
            connection.Open();
            cmd.ExecuteNonQuery();


Он_самый
(и вообще вас должны были учить правилам приведения типов).

к сожалению, нас мало чему учат. учимся сами. вот таким образом)
29 апр 13, 21:34    [14246537]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить