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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2015, 22:12   #1
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию Добавить еще условия в предложении MERGE

Здравствуйте ребята , на T-SQL есть такой запрос
Код:
	 merge  Сохранить_начислени_прос as S 
	 using FUNCT_Credit3() C 
	 on(S.КредитID=C.id)  
	 when matched  
         and (DATEDIFF(DAY, Дата_выдачи , GETDATE() )  > Период_дней) -- Вот после этого
       --  можно еще  AND (и что это UPDATE выполялось каждого дня ! А не каждое раз) 
	 then  
	   update set 
	            S.начисленый_проц=S.начисленый_проц+C.[Начислено_процентов] 
	 when not matched by target  
	 then
		 insert (КредитID, начисленый_проц)  
		 values(C.id, C.[Начислено_процентов]) ;
-- потом я пишу select  
	select * from   V_priem
Можно это как то ? если не понятно мой вопрос напишу боле подробно

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

Доброе вечер ребята .... создаль это тема для того что не знал как пользоваться CASE в UPDATE разобрал и выложу силки из английский сайт
http://www.java2s.com/Code/SQLServer...Estatement.htm
потренировал и все стало ясно
Код:
create table CASETable (id int identity(1,1),
                        name nvarchar(30),
                        Price money )
                        
------------------------------------
insert into CASETable values (N'Пива',  50)
insert into CASETable values (N'Чай',   55)
insert into CASETable values (N'Чай',   70)

select * 
from CASETable
--DELETE FROM CASETable

------------------------------------
UPDATE CASETable SET Price = CASE 
                 WHEN Price > 49 AND Price < 51 THEN Price+Price/100*1
                 WHEN Price > 52 AND Price < 56 THEN Price+Price /100*2
                 WHEN Price > 65 AND Price < 71 THEN Price+Price /100*5
                 END
select * 
from CASETable
потом здесь смотрел
http://www.dotnet-tricks.com/Tutoria...h-Example.html
http://www.tech-recipes.com/rx/30514...ate-statement/
еще потренироваль и все ясно
Код:
------------------------------------
--drop table Credit
/* Начинаю реализовать CASE на INSERT */
create table Credit(C_id int identity(1,1),
                    C_date datetime default getdate(),
                    C_Money money,
                    constraint PK_Credit primary key(C_id)
                    );
                    
------------------------------------
--drop table Procent
------------------------------------
Create Table Procent(P_id int identity(1,1),
                     P_date datetime default getdate(),
                     P_Money money,
                     CreditID int not null,
                     constraint FK_ProcC foreign key(CreditID) references Credit(C_id)
                     );
---- --------------------------------------
--delete from Credit
insert into Credit values(GETDATE(), 300)
insert into Credit values(GETDATE(), 450)
insert into Credit values(GETDATE(), 590)
select * from Credit
----------------------

create View Cred_v
as
				select * , CASE 
						   WHEN (select DATEDIFF(DAY, C_date, GETDATE() ) ) > 10
						   THEN -- 2) после 10 дней начисляетсия 1% каждого дня 
							 (C_Money /100* 1  / 10 )  * DATEDIFF(DAY,C_date,GETDATE()) / 1  
						   ELSE -- 1) при оформление сразу  10% 
							(C_Money /100* 10)
						   END [C_Proc],

						   isnull(( select P_Money
								   from Procent P
								   where C.C_id=P.CreditID
								  ),0)  P_Money
				                  
from Credit C
------ 1) Это должен Выполнять в CASE после ELSE  А до этого он должень ----

INSERT Procent (CreditID, P_Money)
SELECT C_id, C_proc
FROM Cred_v 
WHERE NOT EXISTS (SELECT CreditID, P_Money  FROM Procent  
                  WHERE Cred_v.C_id=Procent.CreditID
                  );
UPDATE   Procent  SET P_Money = (CASE 
                                 WHEN 
                                   (select DATEDIFF(DAY, C.C_date , GETDATE() ) ) > 10 
                                 THEN 
                                  P.P_Money+ C.C_Proc
                                  ELSE
                                  P.P_Money
                  END )
FROM Cred_v C INNER JOIN Procent P
ON C.C_id=P.CreditID
select * 
from  Cred_v

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

Еще осталось вопрос: сам в коде в коментаре
Код:
UPDATE   Procent  SET P_Money = (CASE 
                                 WHEN --Это условия работает да
                                   (select DATEDIFF(DAY, C.C_date , GETDATE() ) ) > 10 
                                 THEN -- Вот здесь  (P.P_Money + C.C_Proc)  хочу  что это апдейт выполнялос каждого дня и не каждый раз  .  Это можно как то дописать ?
                                  (P.P_Money + C.C_Proc)  
                                 ELSE
                                  P.P_Money
                                 END )
FROM Cred_v C INNER JOIN Procent P
ON C.C_id=P.CreditID
Скажите пожалуйста как это дописать ? или можно так что это код который у меня на #3 упаковать в триггере и это триггер вешать на представление ? так то что он выполнялос только на каждого дня

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

Тема можно закрыть, Спасибо всем...
xxbesoxx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить еще 3 графика werovulv Мультимедиа в Delphi 4 31.03.2015 14:10
добавить на третий лист еще одну колонку panych Microsoft Office Excel 5 06.10.2014 16:05
Дано предложение. Добавить к нему в конце столько звездочек, сколько букв в этом предложении. pascal BBorr1 Помощь студентам 2 09.02.2012 16:58
Как к условию, добавить еще условие valerij Microsoft Office Excel 8 22.10.2010 21:59
Как добавить в Select Case, еще один индекс valerij Microsoft Office Excel 3 23.02.2010 10:42