SUM FIRST_VALUE或SUM group by仍显示所有行吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SUM FIRST_VALUE或SUM group by仍显示所有行吗?相关的知识,希望对你有一定的参考价值。
我有一个如下表:
InvoiceNum, CreditNum, ItemID, TotalCreditDetail, TotalCredit, TotalCost, SumCreditDetailTaxed
001 , 001 , ITEM-A, 340 , 20811 , 20894.84 , 340
001 , 002 , ITEM-B, 0 , 20811 , 20894.84 , 20471
001 , 002 , ITEM-C, 4510 , 20811 , 20894.84 , 20471
001 , 002 , ITEM-D, 1424 , 20811 , 20894.84 , 20471
001 , 002 , ITEM-E, 2230 , 20811 , 20894.84 , 20471
001 , 002 , ITEM-F, 5225 , 20811 , 20894.84 , 20471
001 , 002 , ITEM-G, 3400 , 20811 , 20894.84 , 20471
001 , 002 , ITEM-H, 1242 , 20811 , 20894.84 , 20471
001 , 002 , ITEM-I, 2200 , 20811 , 20894.84 , 20471
001 , 002 , ITEM-J, 240 , 20811 , 20894.84 , 20471
[我正在尝试使用“ uncategorizedcredit”获得一列,基本上是与ItemID无关的信用。 TotalCredit是InvoiceNum所独有的,因此我可以通过减去FIRST_VALUE(TotalCredit) OVER (PARTITION BY InvoiceNum) - SUM(TotalCreditDetail) OVER (PARTITION BY InvoiceNum) as UncategorizedCredit
来获得此数字吗?我想我可能已经回答了有关如何计算UncategorizedCredit的问题,但是我不确定。我今天才发现FIRST_VALUE
。我目前正在使用SUM(CASE WHEN... )
进行计算,但是它很杂乱,似乎需要我按SUM()
进行分组,然后再取消分组以获取报告所需的所有详细信息。
[之后,我需要对CrystalReports中整个报告的总数求和,即UncategorizedCredit列。这是个棘手的问题,因为该报告按ITEM分组,InvoiceNum 002可能具有ITEM-C和ITEM-D,InvoiceNum 003可能具有ITEM-H和ITEM-I,等等。现在我正在使用变量将报表明细中的数字加到总计中。然后,我想回去,从总计中减去任何未分类的积分。
我的问题是,如何将每个发票值与按ITEM-ID分组的报告相加?我考虑过使用一个数组来存储已经累加的InvoiceNum,但是数组的最大数量为1000,并且此报告中的数量将大大超过该数量。
我想我可以在从上一个选择语句中选择的新选择语句中使用SUM(UncategorizedCredit) OVER() as TotalUncategorizedCredit
?
我不能使用嵌套选择,因为CrystalReports对数据应用了一个filter / where子句,并且总计将不准确。为了获得TotalCreditDetail和SumCreditDetailTaxed,我目前正在使用〜8-10种各种类型的JOINS,有些RIGHT OUTER JOIN (SELECT * FROM table) ON x = y
。我实际上实际上没有SQL,我明天将尝试SUM,但是如果FIRST_VALUE
不起作用,那么我不确定还要做什么。
这可能只相当于一千美元的差额,但我正在尝试说明所有问题。
select invoicenum,
(TotalCredit - sum(TotalCreditDetail)) as uncategorizedCredit
from t
group by invoicenum, TotalCredit;
实际上实际上不需要
first_value()
-因为每一行的值都相同。因此,作为窗口函数,可以这样执行:
select t.*, (max(TotalCredit) over (partition by invoicenum) - sum(TotalCreditDetail) over (partition by invoicenum) ) as uncategorizedCredit from t;
您可以使用first_value()
而不是min()
/max()
-但后者更易于输入。
以上是关于SUM FIRST_VALUE或SUM group by仍显示所有行吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django ORM 中执行 GROUP BY ... COUNT 或 SUM?
不能在 Group by/Order by/Where/ON 子句中使用 Group 或 Aggregate 函数(min()、max()、sum()、count()、...等)
通过laravel eloquent查询Mysql sum group