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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2015, 07:26   #1
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию T-SQL -е несколько вычисляемые поля попасную CASE

Здравствуйте ребята , Я еще к вам обращаюсь, хочу ваши советь ... Есть многотабличный запрос и там несколько вычисляемые поля, все читаю с помощью CASE и это запрос у меня "функции который возврашаеть таблицу " все как било Т.З делал так ... Выложу скриншоти что все било ясно ....
Изображения
Тип файла: jpg 1.jpg (75.1 Кб, 122 просмотров)
Тип файла: jpg 2.jpg (88.9 Кб, 125 просмотров)
Тип файла: jpg 3.jpg (91.7 Кб, 125 просмотров)
Тип файла: jpg 4.jpg (73.6 Кб, 135 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 11.07.2015, 07:32   #2
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Продолжаю и извиняюсь что не ползую кнопка "Правка" Бухгалтер с которым я много время разговоривал что он написаль Т.З нормально-понятно требования своего ! Не ожидано требуеть раелизоват это . Вопрос : в таком случи создать еще таблица и там созшанить это "Начисление проценты" или что делать ?
Изображения
Тип файла: jpg 5.jpg (90.2 Кб, 135 просмотров)

Последний раз редактировалось xxbesoxx; 11.07.2015 в 07:36.
xxbesoxx вне форума Ответить с цитированием
Старый 12.07.2015, 00:07   #3
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

см. вложение
Вложения
Тип файла: zip XXXX.zip (8.2 Кб, 11 просмотров)
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 12.07.2015, 11:53   #4
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
см. вложение
Спасибо за потраченное время , Но дела подругому, смотрите скриншот . Это бухгалтеры по другому смотрят этот мир. Они говорять что клиент можеть вернеть часть денег и не отплатит процент . и ПРОЦЕНТ не должен пропадать ... И начислять уже из "Остаток"
Я подумал это как делать . "процент должен где то хранить" сделаю и выложу
Изображения
Тип файла: jpg 111.jpg (72.0 Кб, 129 просмотров)
Тип файла: jpg 3.jpg (74.8 Кб, 129 просмотров)

Последний раз редактировалось xxbesoxx; 12.07.2015 в 12:10.
xxbesoxx вне форума Ответить с цитированием
Старый 12.07.2015, 21:32   #5
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Уважаемый коллега
Попробуйте создать автономное (не вичисляемое ) поле таблице под долг клиента по проценту
Дебет считается как вічислимоле, а процент сам по себе
Как по мне, это самое логическое решение задачи
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 12.07.2015, 23:29   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Как по мне, это самое логическое решение задачи
Ладо , если вам так интересно , покажу пример тестовая база данных !
xxbesoxx вне форума Ответить с цитированием
Старый 12.07.2015, 23:47   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Код:
create Database Test;
-----------------------
use Test;
---------Кредит ------
create Table Кредит
(
 id int identity(1,1),
 Дата_выдачи datetime default getdate(),
 ФИО nvarchar(30) not null,
 Выдано money not null,
 Процент int not null,
 Период_дней int not null,
 constraint PK_Кредит primary key(id)
)
-- Для добавки делаю отделного таблицу !
-- Потом нада же посмотреть детально КТО и КОГДА сколько ДЕНЬГИ добавил
create table Добавка
(id int identity(1,1),
 Дата_добавки datetime default getdate(),
 Добавлений_денег money,
 КредитID int not null,
 constraint FK_Добавка foreign key(КредитID) references Кредит(id)
);

-----------Добавил несколько пасажир ---------------
insert into Кредит(ФИО, Выдано, Период_дней, Процент)
 values(N'Иванов',200,10,10),
       (N'Петров',800,10,10),
       (N'Сидоров',500,10,10)
select * from Кредит
-----------------Второе день добавиль "Иванов" 50 руб. 
insert into Добавка(Дата_добавки, Добавлений_денег, КредитID)
              values('2015-07-13 ',50,1);
-----------------Третий день еще добавиль "Иванов" 50 руб.
insert into Добавка(Дата_добавки, Добавлений_денег, КредитID)
              values('2015-07-14 ',50,1)
              
--------------Собираю данных для отображение -------------------------
select C.id, C.Дата_выдачи, C.ФИО, C.Выдано,
       isnull((select SUM(Добавлений_денег)
               from Добавка D
               where c.id=d.КредитID
               ),0) [Добавка],
       C.Процент, C.Период_дней
from Кредит C

--- если бугалтер захочеть посмотреть кто когда добавил и сколько
select C.id, C.ФИО, C.Выдано, C.Процент, C.Период_дней, 
       isnull(D.Добавлений_денег,0) Добавлений_денег, D.Дата_добавки
from Кредит C LEFT JOIN Добавка D
ON C.id=D.КредитID

---------------------- Выдано + Добавлений_денег-----------------
select C.id, C.Дата_выдачи, C.ФИО, C.Выдано,isnull((select SUM(Добавлений_денег)
       from Добавка D where c.id=d.КредитID ),0) [Добавка],
       C.Процент, C.Период_дней,
       -------------Выдано + Добавлений_денег
       C.Выдано + isnull((select SUM(Добавлений_денег) from Добавка D where c.id=d.КредитID
       ),0) [Добавлений_Добавлений], C.Процент, C.Период_дней
from Кредит C
--- Создаю еще таблицу для возврата денег. клиент по частям закриваеть свой кредит 
--- Я даже не сомневаюсь что бугалтеру это нужно ;)) 
Create table Возврат_денег 
(id int identity(1,1),
 дата_возврата datetime,
 оплаченные_кредиты money,
 КредитID int not null,
 constraint FK_Возврат_денег  foreign key(КредитID) references Кредит(id)
); 
----------"Иванов" возврашаеть из своего кредитов только 80 руб ---------
insert into Возврат_денег(дата_возврата, оплаченные_кредиты, КредитID)
              values('2015-07-15 ',80,1)
----------еще это "Иванов" возврашаеть из своего кредитов только 20 руб ---------
insert into Возврат_денег(дата_возврата, оплаченные_кредиты, КредитID)
              values('2015-07-16 ',20,1)
 
 ----- Сейчас я  суммируя все деньги который возврашаль клиент 
 
select C.id, C.Дата_выдачи, C.ФИО, C.Выдано,isnull((select SUM(Добавлений_денег)
       from Добавка D where c.id=d.КредитID ),0) [Добавка],
       C.Процент, C.Период_дней,
       -------------Выдано + Добавлений_денег
       C.Выдано + isnull((select SUM(Добавлений_денег) from Добавка D where c.id=d.КредитID
       ),0) [Добавлений_Добавлений], --- Суммируя все [оплаченные_кредиты]
                                     isnull((select SUM(Оплаченные_кредиты) 
                                     from Возврат_денег V
                                     where C.id=V.КредитID),0)[Оплаченные_кредиты],
													isnull((select SUM(Процент) 
												                from Процент P
														where C.id=P.КредитID
														),0) [Оплаченный_процент]
                                     
from Кредит C

------ Мне еще таблица нужно для процентов где будет хранить все оплачение проценти
create table Процент
(
 id int identity(1,1),
 Дата_период datetime , -- здесь это на какой число он платит процент! можеть зарание заплатит на 10 день период
 Процент money,
 дата_оплати datetime default getdate(), -- здесь "текушае дата и время" момент оплати
 КредитID int not null, 
 constraint FK_Процент  foreign key(КредитID) references Кредит(id)
)

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

Код:
---- Все это код я хочу запаковать функцие и работать к ней как таблица

ALTER FUNCTION dbo.FUNCT_Credit()
RETURNS TABLE  
AS
 RETURN (
         select C.id, C.Дата_выдачи, C.ФИО, C.Выдано,isnull((select SUM(Добавлений_денег)
       from Добавка D where c.id=d.КредитID ),0) [Добавка],
       C.Процент, C.Период_дней,
       -------------Выдано + Добавлений_денег
       C.Выдано + isnull((select SUM(Добавлений_денег) from Добавка D where c.id=d.КредитID
       ),0) [Выдано_Добавлений], --- Суммируя все [оплаченные_кредиты]
                                     isnull((select SUM(Оплаченные_кредиты) 
                                     from Возврат_денег V
                                     where C.id=V.КредитID),0)[Оплаченные_кредиты],
													 isnull((select SUM(Процент) 
													         from Процент P
														 where C.id=P.КредитID
														 ),0) [Оплаченный_процент]
                                     
from Кредит C);


-- Уже все нужние данных у меня это функций и для "Остаток"=(Выдано_Добавлений-Оплаченные_кредиты)
CREATE FUNCTION dbo.FUNCT_Credit2()
RETURNS TABLE  
AS
 RETURN ( 
			select * , (Выдано_Добавлений-Оплаченные_кредиты)Остаток
			from FUNCT_Credit()
		)
----------------------------------------------
select *
from FUNCT_Credit2() 

-------------- Все Начинаю читат процент!   -----------
select id, Дата_выдачи, ФИО, Выдано, Добавка, Процент, Период_дней, Выдано_Добавлений,
       Оплаченные_кредиты, Остаток,
       -- Если в момет оформление сразу из "Выданого" должен начислить процент
       -- и потом если клиент добавляеть денег тоже из это добавлений надо читать
       -- в из "дата выдачи"
     case
     when 
    (select DATEDIFF(DAY, Дата_выдачи , GETDATE() ) ) > Период_дней
     then-- сказано что после 10 дней должен начислить 1%  из "Остаток" каждого дня ! 
     (Выдано_Добавлений /100* Процент )+(Остаток /100*  Процент  / Период_дней )  
    *DATEDIFF(DAY,Дата_выдачи,GETDATE())-
    (Остаток /100* Процент ) / 1  
     else 
     (Выдано_Добавлений /100* Процент )
    end AS [Начислено_процентов], Оплаченный_процент
from FUNCT_Credit2()
ВСЕ РАБОТАЕТ ! как било изначально сказано в Т.З но сейчас "Бугалтер" требует "что если клиент еще оплачивает част кредитов -Оплаченные_кредиты процент начисленый ОН не должен менятся . В таком случи буду делать еще таблицу где буду это процент хранить .... отличается от ваши таблици который вы создали EXCEL-е ? Я бидло кодер да ?
Цитата:
Попробуйте создать автономное (не вичисляемое ) поле таблице под долг клиента по проценту
Я думаю , еще одного таблицу создать .... делаю куда денется , время есть , не горить
Изображения
Тип файла: jpg 1.jpg (47.4 Кб, 128 просмотров)
Тип файла: jpg 2.jpg (74.4 Кб, 133 просмотров)
Тип файла: jpg 3.jpg (35.3 Кб, 50 просмотров)

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


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL Server 2008 вычисляемые поля postman Помощь студентам 0 08.01.2013 14:21
вычисляемые поля иван_пропал SQL, базы данных 5 26.12.2012 14:45
вычисляемые поля hunter03 Помощь студентам 5 14.12.2011 18:01
Вычисляемые поля. Masia Общие вопросы C/C++ 5 15.01.2011 00:02
Вычисляемые поля - ? Evgenii БД в Delphi 2 06.08.2009 17:03