Sql server 基于组条件的T-SQL条件最大值或求和

Sql server 基于组条件的T-SQL条件最大值或求和,sql-server,tsql,aggregates,Sql Server,Tsql,Aggregates,我还没有弄明白这一点,我想找出最有效的方法。我有此表(显示部分记录): 从该表中,我需要得出以下结果集: prefix CmmtAmount ------ ---------- 100981 9 600499 7 这就是逻辑: 对于每个前缀: 如果存在多个但相同的CmmtNumber记录,请选择 一个最大(CmmtAmount) 如果存在多个不同的CmmtNumber记录, 显示所有这些记录的总和(CmmtAmount) 我一直在研究OVER/PARTI

我还没有弄明白这一点,我想找出最有效的方法。我有此表(显示部分记录):

从该表中,我需要得出以下结果集:

prefix  CmmtAmount
------  ----------
100981         9
600499         7
这就是逻辑:

对于每个前缀

  • 如果存在多个但相同的CmmtNumber记录,请选择 一个最大(CmmtAmount
  • 如果存在多个不同的CmmtNumber记录, 显示所有这些记录的总和(CmmtAmount

我一直在研究OVER/PARTITION,但找不到正确的查询。请帮忙!谢谢。

在下列情况下使用
案例:

select
  prefix,
  case when min(CmmtNumber) = max(CmmtNumber) then max(CmmtAmount) 
                                              else sum(CmmtAmount) 
  end as CmmtAmount
from mytable
group by prefix
order by prefix;

在下列情况下使用
案例:

select
  prefix,
  case when min(CmmtNumber) = max(CmmtNumber) then max(CmmtAmount) 
                                              else sum(CmmtAmount) 
  end as CmmtAmount
from mytable
group by prefix
order by prefix;

我不确定是否完全理解您的要求,但我会尝试一下:

SELECT Prefix, MAX(CmmtAmount) 
FROM YOUR_TABLE 
GROUP BY Prefix
HAVING MIN(CmmtNumber)=MAX(CmmtNumber)
UNION 
SELECT Prefix, SUM(CmmtAmount) 
FROM YOUR_TABLE 
GROUP BY Prefix 
HAVING MIN(CmmtNumber) != MAX(CmmtNumber)

我希望,这对您有用。

我不确定是否完全理解您的要求,但我会尝试一下:

SELECT Prefix, MAX(CmmtAmount) 
FROM YOUR_TABLE 
GROUP BY Prefix
HAVING MIN(CmmtNumber)=MAX(CmmtNumber)
UNION 
SELECT Prefix, SUM(CmmtAmount) 
FROM YOUR_TABLE 
GROUP BY Prefix 
HAVING MIN(CmmtNumber) != MAX(CmmtNumber)

我希望这对你有用。

你会认为NULL是一个值吗?因此,如果有一个前缀只有
CmmtNumber
123456且为空,您是想要
MAX(CmmtAmount)
还是
SUM(CmmtAmount)
?如果同一前缀有多个相同和不同的CmmtNumber呢?@Nikolaus:这是一个很好的观点。不确定是否会出现这种情况,但如果出现这种情况,我将如何处理?谢谢你的回答,顺便说一下,ChelutO2:你可以使用<代码>计数(CMMTNATE)和<代码>计数(不同的CMMTNATE)来检查这一点。你认为NULL是一个值吗?因此,如果有一个前缀只有
CmmtNumber
123456且为空,您是想要
MAX(CmmtAmount)
还是
SUM(CmmtAmount)
?如果同一前缀有多个相同和不同的CmmtNumber呢?@Nikolaus:这是一个很好的观点。不确定是否会出现这种情况,但如果出现这种情况,我将如何处理?顺便说一句,也谢谢你的回答。切鲁托2:你可以用
COUNT(CmmtNumber)
COUNT(DISTINCT CmmtNumber)
来检查这个。伙计!有时候,逻辑比看上去简单得多。我想把事情复杂化太多了。非常感谢你,这就成功了,伙计!有时候,逻辑比看上去简单得多。我想把事情复杂化太多了。非常感谢,这就成功了。