Sql 具有多个列的分组依据
我有一个表,它有以下列 我希望得到的结果列数相同,但账户代码重复次数不超过一次的运行余额总和 我试过这个问题Sql 具有多个列的分组依据,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个表,它有以下列 我希望得到的结果列数相同,但账户代码重复次数不超过一次的运行余额总和 我试过这个问题 select AccountCode , 'All Companies' as divisionName , AcName , LF_AccountType , Sum(ISNULL(runningBalance,0)) as runningBalance from Table group by AccountCode , divisionName , AcName , LF_A
select AccountCode , 'All Companies' as divisionName , AcName , LF_AccountType , Sum(ISNULL(runningBalance,0)) as runningBalance from Table
group by AccountCode , divisionName , AcName , LF_AccountType
不清楚你的问题是什么。但是,group by语句中的所有列必须位于查询的表中或从查询的表派生。因此,您不能按在组中使用分区名称。你不需要它。 因此,最直接的语法修正是:
select AccountCode , 'All Companies' as divisionName , AcName ,
LF_AccountType , Sum(ISNULL(runningBalance,0)) as runningBalance
from Table
group by AccountCode, AcName , LF_AccountType
解决方案
因为您使用的是固定值,所以只需对其使用聚合函数并将其从
GROUP BY
子句中删除,就没有意义了。例如:
SELECT AccountCode , AcName , LF_AccountType ,
MIN('All Companies') as divisionName,
SUM(ISNULL(runningBalance,0)) as runningBalance from Table
group by AccountCode , AcName , LF_AccountType
权变措施
尝试将Windows函数与子查询一起使用:
SELECT * FROM (
Select AccountCode , 'All Companies' as divisionName , AcName , LF_AccountType ,
Sum(ISNULL(runningBalance,0)) OVER (PARTITION BY LF_AccountType ) as runningBalance ,
ROW_NUMBER() OVER(PARTITION BY LF_AccountType) as rn
from Table
) AS T1 WHERE T1.rn = 1
或者将子查询与Group by一起使用
Select 'All Companies' as divisionName, * From (
select AccountCode , AcName ,
LF_AccountType , Sum(ISNULL(runningBalance,0)) as runningBalance
from Table
group by AccountCode, AcName , LF_AccountType
) T1
查询应该可以工作。到底出了什么问题?是否有可能
AccountCode
的AcName
有不同的空格?也许可以尝试修剪该列?因为您使用的是固定值,所以只需对其使用聚合函数,并将其从GROUPBY子句中删除即可。看看我对答案的更新