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

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

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

Восстановить пароль

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

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

Stilet Буду посмотреть и в общем думаю что буду запретить изменение системные дата чтобы не чего не изменили " Красивые блондинки ) = это операторы "
Друг у меня еще второй вопрос с вами. Я извиняюсь но если будет время скажите ваши идея ! Я буду очень благодарен .
Вопрос: Допустим моего таблице в поля--> naimenovanie nvarchar(40) not null, -- Наименование "хранится ФИО" в логике добавляется еще задача !!! Одно и тот же клиент который был у этого ломбарде больше 5 раз , Тогда ему добавляется процент 14 день !
1. Узнать количество-сколько раз это клиент был у них можно так
Код:
select naimenovanie ,count(naimenovanie) as kolvo_Customers 
from Tab1
group by naimenovanie
having = .....
2. Что процент добавлял 14 день это тоже можно менять здесь
Код:
(vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/14)
НО , Как это все можно объединить ?
xxbesoxx вне форума Ответить с цитированием
Старый 14.08.2014, 14:30   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
хранится ФИО
А если тезки? Да еще полные. Или ФИО чуть не так набрали, просто вместо 1-го пробела 2 вбили

Подзапросом:
Код:
CASE WHEN (SELECT count(naimenovanie) ...)>=5 THEN ... ELSE ... END AS ...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.08.2014, 14:36   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мне кажется что клиентам нужно выписывать лицевые счета. Тогда путаницы не будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2014, 15:31   #14
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

Для тест делаю второе таблица , что было понятно что я хочу
Код:
create Table Tab2
(
	id int identity(1,1) primary key,
	dat_vidan datetime default getdate(), -- Дата оформления
	naimenovanie nvarchar(40) not null, -- Наименование
	fio nvarchar(40) not null,
	vidan_deng money -- выданный деньги
);
Добавляю запись
Код:
insert into Tab2(naimenovanie, fio, vidan_deng)
values(N'Телевизор',N'Денис дубинин',200),
           (N'Ноутбук',N'Денис дубинин',250),
           (N'Телефон',N'Денис дубинин',800),
           (N'Что то',N'Денис дубинин',750),
           (N'Что то',N'Денис дубинин',650),
           (N'Что то', N'Иване иванов',620),
           (N'Что то', N'Васия пупкин',40),
           (N'Что то', N'Аня микифоров',50),
           (N'Что то', N'Оксана михаленко ',85)
    select * from Tab2
Запрос для процент работает хорошо да ...
Код:
 select id, dat_vidan, naimenovanie, fio, vidan_deng, 
DATEDIFF(DAY,dat_vidan,GETDATE()) as [Кол-во ден] ,
case when vidan_deng <=50 then  -- если  vidan_deng <=50 тогда добавить только  5 руб
  (vidan_deng +5)+ 5 *(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
если проверим одно и тот же клиент сколько раз приходил !
Код:
select fio, COUNT(fio) as kolvo_cust
from Tab2
group by fio
Денис дубинин У был уже 5 раз ! У этого товарища наши запрос сразу добавил 10% да .
Я хочу что у этого товарища второе процент добавлялось через 14 день потому что он был уже 5 раз.
Клиент который был 5 раз или больше добавление процент для них 14-ого день !

Вот так не правильно . Где я допускаю ошибка ?
Код:
 select id, dat_vidan, naimenovanie, fio, vidan_deng, 
DATEDIFF(DAY,dat_vidan,GETDATE()) as [Кол-во ден] ,
case when vidan_deng <=50 then  -- если  vidan_deng <=50 тогда добавить только  5 руг
  (vidan_deng +5)+ 5 *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
else -- Противном случи 10% от виданный сумма 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10), -- Здесь правильно запятая ?
  ---------------------------------------------------------------------------------------------------------------------------------------------------- 
  CASE WHEN (SELECT count(naimenovanie) )>=5 THEN
  (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/14)
  else
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
  ---------------------------------------------------------------------------------------------------------------------------------------------------- 
end  as [деньги+%]
from Tab2
Как это блок добавить ? И где дописать GROUP BY ?
Код:
  CASE WHEN (SELECT count(fio) )>=5 THEN
  (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/14)
  else
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
  end

Последний раз редактировалось Stilet; 14.08.2014 в 16:14.
xxbesoxx вне форума Ответить с цитированием
Старый 14.08.2014, 16:13   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну не просто же SELECT count(fio), а полный запрос с FROM, WHERE и прочей лабудой
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.08.2014, 16:45   #16
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

Вот смотрите , отдельно это запрос работает так да

Код:
SELECT count(fio) AS kolvo_cust  from tab2   group by  fio having count(fio)  >=5
Но здесь допускаю ошибка синтаксиса

Код:
 select id, dat_vidan, naimenovanie, fio, vidan_deng, 
DATEDIFF(DAY,dat_vidan,GETDATE()) as [Кол-во ден] ,
case when vidan_deng <=50 then  -- 
  (vidan_deng +5)+ 5 *(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 [деньги+%], 
  ---------------------------------------------------------------------------------------------------------------------------------------------------- 
  CASE 
   WHEN (SELECT count(fio) AS kolvo_cust  from tab2   group by  fio having count(fio)  >=5 THEN
  (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/14)
  else
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
  end 
  ---------------------------------------------------------------------------------------------------------------------------------------------------- 
from Tab2
Msg 156, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'THEN'.
Пока не понял как исправит . Где что исправить ?

Последний раз редактировалось xxbesoxx; 14.08.2014 в 16:51.
xxbesoxx вне форума Ответить с цитированием
Старый 14.08.2014, 17:10   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
WHEN (SELECT count(T2.fio) from tab2 T2 WHERE T2.fio=T1.Fio)>=5 ...
...
----------------------------------------------------------------------------------------------------------------------------------------------------
from Tab2 T1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.08.2014, 17:31   #18
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

Да вот , Но здесь еще второе вычисление поля . Мне надо все это условия одном а поля , Пожалуйста если это можно

Код:
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)
else -- Противном случи 10% от виданный сумма 
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)  
end  as [деньги+%],
  ---------------------------------------------------------------------------------------------------------------------------------------------------- 
  CASE 
  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
   (vidan_deng+ vidan_deng/100*10) +(vidan_deng /100*10) *(DATEDIFF(DAY,dat_vidan,GETDATE())/10)
  end 
  ---------------------------------------------------------------------------------------------------------------------------------------------------- 
from Tab2 t1
Пожалуйста если это можно
Изображения
Тип файла: jpg vichL.jpg (103.2 Кб, 105 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 14.08.2014, 17:49   #19
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

Вот у меня еще ошибка
Код:
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)
  -------------------------------------------------------------------------------
   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 Tab2
После первого when .............. then ... как реализовать еще второе условия when (SELECT count(T2.fio) from tab2 T2 WHERE T2.fio=T1.Fio)>=5 THEN
xxbesoxx вне форума Ответить с цитированием
Старый 14.08.2014, 18:02   #20
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

Аватар Извиняюсь .... Да все правильно работает . Просто я дописал еще что то личное .... Тема можно закрыть !
Код:
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)
  -------------------------------------------------------------------------------
   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 Tab2  T1
РЕБЯТА ОГРОМНОЕ ЧЕЛОВЕЧЕСКИ СПАСИБО . ДАЙ ВАМ БОГ ЗДОРОВЬЯ
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