У меня есть запрос в SQL, в котором я представляю, имеет ли человек платежи или невыплаченные платежи. В этом запросе у меня есть аргумент case, но мне нужно объединить записи вместе, чтобы убедиться, что платежи добавлены вместе, так что то, что я проверяю, является правильным.Группировка в SQL-заявлении?
Позвольте мне показать код, и, надеюсь, это будет иметь больше смысла.
Вот запрос я в настоящее время с помощью:
Declare @tmpTable Table
(
[Bid #] int,
Name varchar(200),
Spent numeric(18,2),
Paid numeric(18,2),
[Credit Card On File] varchar(3),
SaleCounter int,
Notes varchar(max)
)
Insert into @tmpTable([Bid #], Name, Spent, Paid, [Credit Card On File], SaleCounter, Notes)
Select s.[BidderNumber] as 'Bid #', ltrim(rtrim(b.bidderName)) as 'Name', isnull(s.saleprice * s.Quantity,0) as 'Spent',
isnull(t.Amount,0) as 'Paid',
case
when b.cconfile = 1 then 'Yes'
else
'No'
end as 'Credit Card On File',
s.SaleCounter, isnull(t.Notes, '') as 'Notes'
from sales s inner join Bidders b on s.BidderNumber = b.BidderNumber
Left outer join transactions t on t.BidderNumber = s.BidderNumber
order by s.Biddernumber, b.biddername, b.cconfile, SaleCounter
Select [Bid #], Name, Spent as 'Total Purchases', Paid as 'Current Payments',
case
when [Credit Card On File] = 'Yes' then
case
when cast(Paid as numeric(18,2)) = 0 then cast(Spent as numeric(18,2))
else
case when (sum(cast(Paid as numeric(18,2)))) > sum(cast(Spent as numeric(18,2))) then (cast(Paid as numeric(18,2)))- sum(cast(Spent as numeric(18,2)))
else (cast(Spent as numeric(18,2)) - cast(Paid as numeric(18,2)))
end
end
else 0
end as 'Amount To Charge Credit Card',
case
when [Credit Card On File] = 'No' then
case
when cast(Paid as numeric(18,2)) = 0 then cast(Spent as numeric(18,2))
else
case when (sum(cast(Paid as numeric(18,2)))) > sum(cast(Spent as numeric(18,2))) then (cast(Paid as numeric(18,2)))- sum(cast(Spent as numeric(18,2)))
else (cast(Spent as numeric(18,2)) - cast(Paid as numeric(18,2)))
end
end--sum(Outstanding)
ELSE 0
end as 'Outstanding Balance', Notes
from @tmpTable
group by [Bid #], name, spent, paid, [Credit Card On File], SaleCounter, Notes
order by [Bid #], Name, spent, paid, [Credit Card On File], SaleCounter, Notes
Вот набора записей, возвращается и вставляется в @tmpTable:
Bid # Name Total Purchases Current Payments Amount To Charge Credit Card Outstanding Balance Notes
101 Tom & Joan Bergland 7500.00 0.00 0.00 7500.
102 John & Bonnie Black 50.00 50.00 0.00 0.00
108 Cindy Davidson 3600.00 1600.00 0.00 2000.00 250
108 Cindy Davidson 3600.00 2000.00 0.00 1600.00
109 Cynthia Davis 315.00 315.00 0.00 0.00 2355
117 Susan Harris 75.00 75.00 0.00 0.00
119 Jim & Julie Hill 520.00 0.00 520.00 0.00
125 Bill & Amy Lee 526.00 526.00 0.00 0.00
Теперь моя проблема в том, что я показывая баланс, связанный с тендерной заявкой № 108, когда нет баланса. В двух отчетах отражены два платежа, произведенных против баланса, и когда они суммируются вместе, они равны балансу. Мне нужно показать каждый платеж пользователю, но когда выплаты равны общей покупке, тогда баланс не должен отображаться. однако, если есть баланс, это должно быть показано. (Платежи по кредитным картам различны ... у меня возникают проблемы с платежами без CC)
Есть ли способ группировки внутри оператора case или есть что-то в sql, которое я пропускаю, что позволит мне то, что мне нужно случиться?
Я ценю вашу помощь заранее.
Я попытался это, но результат был тот же, как и мой исходный код. Цените ответ. Гораздо чище, чем у меня до сих пор. К сожалению, такой же результат. – DadTo2
На самом деле ... проблема заключается в столбце «Примечания». Вам нужно удалить его. См. Мое редактирование –
Нет, единственными значениями были бы «Да» или «Нет». В базе данных запись для этого битового поля фактически равна NULL, но я думал, что способ, которым я должен сначала кодировать часть, будет учитывать значения NULL с помощью «Else» части оператора case в первой части запроса. – DadTo2