Я пытаюсь написать отчет, который будет разделять общую сумму для каждого вкладчика на их основную учетную запись и их вторичную учетную запись на основе пределов основной учетной записи. Ниже приведен некоторый код для создания некоторых таблиц примеров, а также то, что у меня есть для кода, и нужный набор результатов, отображаемый внизу. Часть кода, который закомментирован, - это простой английский, о чем я не уверен, как кодировать.Разделение суммы между разными учетными записями
Я пытаюсь написать это на SQL Server 2012.
Create Table Test
(
Empid Int not null,
Account Varchar(25) not null,
MaxAmt Int not null
)
Create Table Test2
(
EmpID Int not null,
TtlAmt int not null
)
Insert Into Test
Values (748,'Primary',50)
Insert Into Test
Values (748,'Secondary',99999)
Insert Into Test
Values (750,'Primary',50)
Insert Into Test
Values (750,'Secondary',99999)
Insert Into Test
Values (752,'Primary',60)
Insert Into Test
Values (752,'Secondary',99999)
Insert Into Test2
Values (748,80)
Insert Into Test2
Values (750,75)
Insert Into Test2
Values (752,20)
Select * from Test
Select * from Test2
Select
B.EmpID
,A.Account
,Case
When A.Account = 'Primary' and B.TtlAmt >= A.Maxamt Then A.MaxAmt
When A.Account = 'Primary' and B.TtlAmt <= A.MaxAmt Then B.TtlAmt
When A.Account = 'Secondary' and B.TtlAmt > /* Max of Primary */ Then B.TtlAmt - /* Max of Primary */
When A.Account = 'Secondary' and B.TtlAmt <= /* Max of Primary */ Then Null
Else 'Error'
End as Amount
From Test as A
Join Test2 as B
on A.EmpID = B.EmpID
/*************** Desired Result would look like below *******************/
EmpID Account Amount
748 Primary 50
748 Secondary 30
750 Primary 50
750 Secondary 25
752 Primary 20
752 Secondary Null
Это начало, как будет в конечном итоге в общей сложности до 25 счетов максимум для каждого EmpId в то время как некоторые EmpID будут иметь только 1 .
Это, как представляется, очень близко к а Мне нужно. Однако он дает 3 строки данных для каждой комбинации Empid/Account (748 Primary 3x и 748 Secondary 3x ...). Третья запись для Seconday на каждом Empid ниже, чем предыдущие, на 10, единственным исключением является Empid of 752 так как он вторичный был null –
Моя ошибка, пропустил вашу вторую часть. Суммируйте поле Сумма (удалите ошибку) и группу с помощью EmpId и учетной записи, см. Править. – nikolifish
Совершенство. Я все еще не совсем понимаю, как вы можете связать таблицу с самим собой, чтобы это произошло, но это довольно мило. Если я правильно интерпретирую это, мы делаем вывод, полученный через соединение, но только с основными учетными записями, чтобы мы могли захватить maxamt основной учетной записи, глядя на вторичную учетную запись из-за цепочки соединений на EMPID через B> A> A2. Не думайте, что я бы это так поблагодарил. –