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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2014, 14:06   #21
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Ребята у этого запроса хочу добавить еще один условия !

Клиент который был 5 или больше раз то ему первый процент сразу добавляться и второе через 14 день да ! ЭТО ВСЕ ХОРОШО РАБОТАЕТ . Но, еще усложняется задача .
Вопрос : Хочу что пользователь который был 5 или больше раз , после второго процента который добавляется 14 - день ! 3-ого %, 4-ого%, 5-ого% и так далее, ЕМУ ТОЖЕ 10-ого день добавилось как и других клиентов .
------------------------------------------------------------------------
Я думал что это буду определить так ! если as [Кол-во ден] больше 14 того дня ! то через 10-день продолжал процент добавить .
Код:
    ------------ Для 3-ого ПРОЦЕНТ  ---------------------------------------- 
 when (select DATEDIFF(DAY,dat_vidan,GETDATE()) ) > 14 then 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
Не работает правильно! то есть не добавляет 20 день 3-ого процент !
-----------------------------------------------------------------------
Потом думаю что буду определить по другому ! клиент который был 5 или больше раз получил 14-день второе процент. на пример выдали 200 руб. второе процент будет 14-день + выданный = 240 руб . если as [деньги+%] >=vidan_deng/100*20 то процент продолжал еще через 10 день.
Код:
 when (select (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10) ) >= vidan_deng/100*20 then 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
Тоже не правильно ! Где я допускаю ошибка ребята ?
xxbesoxx вне форума Ответить с цитированием
Старый 16.08.2014, 14:16   #22
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

1. Вариант который не правильно работает ДЛЯ КЛИЕНТОВ КОТОРЫЙ БЫЛ 5 или больше раз ! После 3-ого процента
Код:
select id, dat_vidan, naimenovanie, fio, vidan_deng, 
DATEDIFF(DAY,dat_vidan,GETDATE()) as [Кол-во ден] ,
case 
----------------------------------   Если деньги менше или равно 50 тогда процент будеть 5 лари         ----------------------------- 
when vidan_deng <=50 then   
      (vidan_deng +5)+ 5 *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
     ---------------------------------------Если клиенть биль 5 или больше раз ! Тогда  второе поценть через  -------------------- 
 WHEN (SELECT count(T2.fio) from tab2 T2 WHERE T2.fio=T1.Fio)>=5   then --
      (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/14)
    ------------ Для 3-ого ПРОЦЕНТ  что процент зачислял через 10 ден------------------------------------------------- 
 when (select DATEDIFF(DAY,dat_vidan,GETDATE()) ) > 14 then 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)   
  ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
else -- Противном случи 10% от виданный сумма 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)  
end  as [деньги+%]
from Tab2  T1
2. Вариант тоже не правильно работает
Код:
select id, dat_vidan, naimenovanie, fio, vidan_deng, 
DATEDIFF(DAY,dat_vidan,GETDATE()) as [Кол-во ден] ,
case 
when vidan_deng <=50 then  -- если  vidan_deng <=50  
  (vidan_deng +5)+ 5 *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
 -- 1 проверка !  Если клиенть бил 5 или болше раз, то ему добавляем проценть 14-ого дня
   WHEN (SELECT count(T2.fio) from tab2 T2 WHERE T2.fio=T1.Fio)>=5  then
  (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/14)
  ---------------------------------------------------------------------
   ------------ Для 3-ого ПРОЦЕНТ  что  3-ого процент зачислял через 10 ден------------------------------------------------- 
 when (select (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10) ) >= vidan_deng/100*20 then 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)   
  ------------------------------------------------------------------------------------------------------------------------ 
 
else -- Противном случи 10% от виданный сумма 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)  
end  as [деньги+%]
  -----------------------------------------------------------------------------------------------
  
from Tab2  T1
Что не правильно ребята ?
xxbesoxx вне форума Ответить с цитированием
Старый 16.08.2014, 14:22   #23
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Так тоже не правильно
Код:
   ------------ Для 3-ого ПРОЦЕНТ  что  3-ого процент зачислял через 10 ден------------------------------------------------- 
 when (select (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10) ) >= (vidan_deng+ vidan_deng/100*20) then 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)   
  ------------------------------------------------------------------------------------------------------------------------

Последний раз редактировалось xxbesoxx; 16.08.2014 в 14:38.
xxbesoxx вне форума Ответить с цитированием
Старый 16.08.2014, 16:02   #24
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
when (select
select убери. Что он там делает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.08.2014, 19:40   #25
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Убираю , Но все равно у товарища Денис дубинин где у него денег выдано больше 50 руб. и прошло 20 день не добавляет еще 10%
Код:
select id, dat_vidan, naimenovanie, fio, vidan_deng, 
DATEDIFF(DAY,dat_vidan,GETDATE()) as [Кол-во ден] ,
case 
when vidan_deng <=50 then  -- если  vidan_deng <=50  
  (vidan_deng +5)+ 5 *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
 -- 1 проверка !  Если клиенть бил 5 или болше раз, то ему добавляем проценть 14-ого дня
   WHEN (SELECT count(T2.fio) from tab2 T2 WHERE T2.fio=T1.Fio)>=5 then 
     (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/14)

        ------------ Для 3-ого ПРОЦЕНТ  что  3-ого процент зачислял через 10 день--------------------------

 when (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)  >= (vidan_deng+ vidan_deng/100*20) then 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)   
  
 else -- Противном случи 10% от виданный сумма 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)  
end  as [деньги+%]
  -----------------------------------------------------------------------------------------------
from dbo.Tab2  T1
xxbesoxx вне форума Ответить с цитированием
Старый 16.08.2014, 19:44   #26
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Не проверяеться это условия

Код:
when (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)  >= (vidan_deng+ vidan_deng/100*20) then
Заменяю с этом и тоже не проверяется . Не понимаю почему
Код:
 when (select DATEDIFF(DAY,dat_vidan,GETDATE()) ) > 14 then 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)

Последний раз редактировалось xxbesoxx; 16.08.2014 в 19:48.
xxbesoxx вне форума Ответить с цитированием
Старый 16.08.2014, 19:47   #27
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Не проверяеться это условия
Значит предидущие до него условия (одно из предидущих отрабатывает)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.08.2014, 19:49   #28
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Но как делать что оба работал ?

Да вы правильно говорите , Если я комментирую это код , тогда работает
Код:
-- 1 проверка !  Если клиенть бил 5 или болше раз, то ему добавляем проценть 14-ого дня
   --WHEN (SELECT count(T2.fio) from tab2 T2 WHERE T2.fio=T1.Fio)>=5 then 
   --  (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/14)
Но мне нужно оба это условия

Последний раз редактировалось Stilet; 16.08.2014 в 21:14.
xxbesoxx вне форума Ответить с цитированием
Старый 16.08.2014, 20:06   #29
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Вот поменял код местами и так работает вроде нормально .... еще буду все проверить
Код:
select id, dat_vidan, naimenovanie, fio, vidan_deng, 
DATEDIFF(DAY,dat_vidan,GETDATE()) as [Кол-во ден] ,
case 
when vidan_deng <=50 then  -- если  vidan_deng <=50  
  (vidan_deng +5)+ 5 *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
 
------------ Для 3-ого ПРОЦЕНТ  что  3-ого процент зачислял через 10 денег ----------

  when (select DATEDIFF(DAY,dat_vidan,GETDATE()) ) > 14 then 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)

   --  Если клиенть бил 5 или болше раз, то ему добавляем процент 14-ого дня

   WHEN (SELECT count(T2.fio) from tab2 T2 WHERE T2.fio=T1.Fio)>=5 then 
     (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/14)      
  
 else -- Противном случи 10% от виданный сумма 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)  
end  as [деньги+%]
  ------------------------------------------------------------------------------------
from dbo.Tab2  T1

Последний раз редактировалось xxbesoxx; 16.08.2014 в 20:27.
xxbesoxx вне форума Ответить с цитированием
Старый 16.08.2014, 20:16   #30
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Проверял все нормально Stilet огромное спасибо
xxbesoxx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
процент материала Nickolai47 C# (си шарп) 2 19.02.2013 17:46
Вычисление поля delphi xxbesoxx БД в Delphi 5 20.04.2012 11:58
Процент. ROBERT033 Microsoft Office Excel 7 13.05.2011 00:05
Вычисление значения и процент от результата Teon Microsoft Office Excel 5 10.02.2011 01:24
Процент загруженности asd48 Общие вопросы C/C++ 13 07.06.2009 21:04