【发布时间】:2014-08-07 16:07:13
【问题描述】:
我正在尝试在 SQL Server 2008 中创建一个查询...用一些表格示例更好地解释:
FinPeriodNr BalJan BalFeb BalMar BalApr
1 100 100 200 400
2 200 300 100 200
**
问题
**
我希望能够先汇总列,使其看起来像这样:
FinPeriodNr BalJan BalFeb BalMar BalApr
Sum of rows 300 400 300 600
然后能够将各列相加得出总余额,如下所示:
FinPeriodNr TotalSumofBal
1600
是否有可能在一个查询下在 SQL 中汇总所有这些内容,如果可以,我需要使用什么?交叉表?
到目前为止,我的代码只能让我进入第二张桌子
SELECT dbo.Company.CompanyID, dbo.Company.CompanyName, SUM(dbo.SalesSummaryLedgerCOGBP.BalJan) AS SumBalJan,
SUM(dbo.SalesSummaryLedgerCOGBP.BalFeb) AS SumBalFeb, SUM(dbo.SalesSummaryLedgerCOGBP.BalMar) AS SumBalMar,
SUM(dbo.SalesSummaryLedgerCOGBP.BalApr) AS SumBalApr, SUM(dbo.SalesSummaryLedgerCOGBP.BalMay) AS SumBalMay,
SUM(dbo.SalesSummaryLedgerCOGBP.BalJun) AS SumBalJun, SUM(dbo.SalesSummaryLedgerCOGBP.BalJul) AS SumBalJul,
SUM(dbo.SalesSummaryLedgerCOGBP.BalAug) AS SumBalAug, SUM(dbo.SalesSummaryLedgerCOGBP.BalSep) AS SumBalSep,
SUM(dbo.SalesSummaryLedgerCOGBP.BalOct) AS SumBalOct, SUM(dbo.SalesSummaryLedgerCOGBP.BalNov) AS SumBalNov,
SUM(dbo.SalesSummaryLedgerCOGBP.BalDec) AS SumBalDec
FROM dbo.FinancialPeriodCOGBP INNER JOIN
dbo.SalesSummaryLedgerCOGBP ON dbo.FinancialPeriodCOGBP.FinPeriodNr = dbo.SalesSummaryLedgerCOGBP.FinPeriodNr INNER JOIN
dbo.Company ON dbo.SalesSummaryLedgerCOGBP.CompanyID = dbo.Company.CompanyID
GROUP BY dbo.Company.CompanyName, dbo.Company.CompanyID, dbo.Company.Customer, dbo.FinancialPeriodCOGBP.FinStatusOpen
HAVING (dbo.Company.Customer = 1) AND (dbo.FinancialPeriodCOGBP.FinStatusOpen = 1)
请告诉我是否有解决方案,因为我已经尝试了很多但无济于事。
【问题讨论】:
-
我没有仔细阅读你的问题,但我想你可能想使用名为
ROLLUP或CUBE的函数 - 我不知道这些分析函数是否在你的sql版本中方言 -
用
+总结单个列。例如:SUM(dbo.SalesSummaryLedgerCOGBP.BalJan) + SUM(dbo.SalesSummaryLedgerCOGBP.BalFeb)+...+SUM(dbo.SalesSummaryLedgerCOGBP.BalDec)。您可能还想考虑使用表别名。
标签: sql sql-server sql-server-2008 sum crosstab