Sql server 2008 如何在此表上使用group by
这是我桌子的屏幕截图 我正在尝试删除所有按销售合同\u nbr和名称进行分组时,PostAmt总和为0的行 例如: 当按名称分组时,销售合同编号51101008103将被删除,当合计金额为0时,销售合同编号为-96.83和96.83 很简单吧 但除此之外,我想要的是,我想要删除团队中的合同。我的意思是,如果合同5111008195被分组,那么它等于533.87,不会被删除(突出显示) 但我想分组删除它 比如说 两行合同编号5111008195应首先求和(见下图),我的意思是金额-533.87和533.87应求和,以得到0的总和。合同只应留下一份记录 更新 更多说明: 我要做的是首先将行号1和行号2分组(匹配一个正数和另一个负数),然后将其他行分组。如果有4行合同编号相同,则应将第1行和第2行分组,如果绝对金额相同,则应将第3行和第4行分组,如果没有删除第3行和第4行,则应将第3行和第4行分组 我想使用group by来消除总计为0且具有相同名称或合同号的行 我希望我已经把问题说清楚了。如果没有,请询问 怎样才能做到呢 我现在正在做的是:Sql server 2008 如何在此表上使用group by,sql-server-2008,Sql Server 2008,这是我桌子的屏幕截图 我正在尝试删除所有按销售合同\u nbr和名称进行分组时,PostAmt总和为0的行 例如: 当按名称分组时,销售合同编号51101008103将被删除,当合计金额为0时,销售合同编号为-96.83和96.83 很简单吧 但除此之外,我想要的是,我想要删除团队中的合同。我的意思是,如果合同5111008195被分组,那么它等于533.87,不会被删除(突出显示) 但我想分组删除它 比如说 两行合同编号5111008195应首先求和(见下图),我的意思是金额-533.87和
SELECT sales_contract_nbr
,name
,SUM(PostAmt) PostAmt
FROM tblMasData
GROUP BY sales_contract_nbr, name
谢谢。以下是我目前的想法:
SELECT location
,sales_contract_nbr
,name
,SUM(absPostAmt * nbPostAmt) / ABS(SUM(nbPostAmt)) PostAmt
,ABS(SUM(nbPostAmt)) nbPostAmt
,SUM(absPostAmt * nbPostAmt) PostAmtTotal
FROM (
SELECT location
,sales_contract_nbr
,name
,PostAmt
,ABS(PostAmt) absPostAmt
,SUM(CASE WHEN PostAmt >= 0 THEN 1 ELSE -1 END) nbPostAmt
FROM tblMasData
GROUP BY location
,sales_contract_nbr
,name
,PostAmt
,ABS(PostAmt)
) t
GROUP BY location
,sales_contract_nbr
,name
,absPostAmt
HAVING SUM(absPostAmt * nbPostAmt) != 0
看
这并不能完全回答您的问题,例如,如果您有100+100-200,它不会隐藏所有三行。但在一堆行中找到等于0的组合可能会非常混乱
此外,如果某些行的数量相同,则将对它们进行分组。这就是为什么我添加了一列来计算相等的行数,并在末尾添加了一列对这些行求和
这至少应该允许您以编程方式处理数据
让我知道这是否满足您的需要,或者您是否需要一些改进(可能涉及一些不太漂亮的SQL)。您问题的第二部分是什么意思?你能重新表述一下吗?第3行和第4行需要哪种输出?两行(3和4)或一行包含两个PostAmt值的总和?如果第1行=100;第2行=100,第3行=200?是否要隐藏所有三行?是,所有三行都将隐藏。我所要做的就是消除任何和为0的值。在这种情况下,请提供帮助:第1行=100,第2行=-150,第3行=75,是要显示所有3行,还是只显示一行25(求和结果)?