无法将两个SQL语句与运行总数组合
我在组合这两个SQL语句时遇到问题:无法将两个SQL语句与运行总数组合,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在组合这两个SQL语句时遇到问题: SELECT A.PayeeID, A.Date, Sum(A.PermCashAmt), A.Currency, Year(A.Date) as Year_Occured FROM PermCashIn as A GROUP BY A.PayeeID, A.Date, A.Currency, Year(A.Date) 及 我认为答案是: SELECT A.PayeeID, A.Date, A.Currency, Year(A.Date) as Yea
SELECT A.PayeeID, A.Date, Sum(A.PermCashAmt), A.Currency, Year(A.Date) as Year_Occured
FROM PermCashIn as A
GROUP BY A.PayeeID, A.Date, A.Currency, Year(A.Date)
及
我认为答案是:
SELECT A.PayeeID, A.Date, A.Currency, Year(A.Date) as Year_Occured, Sum(A.PermCashAmt), (
SELECT SUM(C.PermCashAmt)
FROM PermCashIn as C
WHERE C.Date <= B.Date And Year(C.Date)=Year(B.Date)
And C.PayeeID = B.PayeeID
) as RunningTotal
FROM PermCashIn as B
INNER JOIN PermCashIn as A
ON (B.Date = A.Date)
AND (B.PayeeID = A.PayeeID)
GROUP BY A.PayeeID, A.Date, A.Currency, Year(A.Date)
ORDER BY A.PayeeID, A.Date
但是我得到了错误
错误[42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]列
“PermCashIn.Date”在选择列表中无效,因为它不是
包含在聚合函数或GROUP BY子句中。
错误[42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]列
“PermCashIn.Date”在选择列表中无效,因为它不是
包含在聚合函数或GROUP BY子句中。
错误[42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]列
“PermCashIn.PayeId”在选择列表中无效,因为它不是
包含在聚合函数或GROUP BY子句中
错误类型:
System.Data.Odbc.OdbcException
我想我正确地使用了GROUPBY子句,我想知道问题是否出在我的跑步总量中。请帮助我这是我第一个使用SQL server的项目。我认为这应该可以:
SELECT A.PayeeID, A.Date, A.Currency, Year(A.Date) as Year_Occured, Sum(A.PermCashAmt),
Sum((
SELECT C.PermCashAmt
FROM PermCashIn as C
WHERE C.Date <= B.Date And Year(C.Date)=Year(B.Date)
And C.PayeeID = B.PayeeID
)) as RunningTotal
FROM PermCashIn as B
INNER JOIN PermCashIn as A
ON (B.Date = A.Date)
AND (B.PayeeID = A.PayeeID)
GROUP BY A.PayeeID, A.Date, A.Currency, Year(A.Date)
ORDER BY A.PayeeID, A.Date
不确定是否需要双括号…因此,我在子查询中使用了self-join,而不是对上一个select语句使用self-join。答案很明显,我不敢相信我没有看到它
SELECT A.PayeeID, A.Date, A.Currency, Year(A.Date) as Year_Occured,
(SELECT Sum(B.PermCashAmt)
FROM PermCashIn as B
WHERE B.Date = A.Date and B.PayeeID = A.PayeeID AND B.Currency = A.Currency) +
ISNULL((SELECT Sum(AdjB.PermCashAmt)
FROM PermCashInAdjust as AdjB
WHERE AdjB.Date = AdjA.Date AND AdjB.PayeeID = AdjA.PayeeID AND AdjB.Currency = AdjA.Currency),0)
as MonthTotal,
(SELECT SUM(C.PermCashAmt)
FROM PermCashIn as C
WHERE C.Date <= A.Date And Year(C.Date)=Year(A.Date) And C.PayeeID = A.PayeeID AND C.Currency = A.Currency) +
ISNULL((SELECT SUM(AdjC.PermCashAmt)
FROM PermCashInAdjust as AdjC
WHERE AdjC.Date <= AdjA.Date And Year(AdjC.Date)=Year(AdjA.Date) AND AdjC.PayeeID = AdjA.PayeeID AND AdjC.Currency = AdjA.Currency),0) as RunningTotal
从PermCashIn作为左连接permcashinad就像A.payeid=AdjA.payeid和A.Date=AdjA.Date上的AdjA一样
按A.payeid、A.Date、A.Currency、YearA.Date、AdjA.payeid、AdjA.Date、AdjA.Currency分组您使用的sql server版本是什么。这里的查询被称为三角连接,存在一些非常严重的性能问题。如果要避免重大重写,为什么不尝试将错误消息指示的列添加到GROUPBY子句中?实际上,我敢打赌,如果您将正在运行的total子查询更改为使用A.Date和A.PayeId,而不是B中它们的等效列,那么错误可能会消失。
SELECT A.PayeeID, A.Date, A.Currency, Year(A.Date) as Year_Occured,
(SELECT Sum(B.PermCashAmt)
FROM PermCashIn as B
WHERE B.Date = A.Date and B.PayeeID = A.PayeeID AND B.Currency = A.Currency) +
ISNULL((SELECT Sum(AdjB.PermCashAmt)
FROM PermCashInAdjust as AdjB
WHERE AdjB.Date = AdjA.Date AND AdjB.PayeeID = AdjA.PayeeID AND AdjB.Currency = AdjA.Currency),0)
as MonthTotal,
(SELECT SUM(C.PermCashAmt)
FROM PermCashIn as C
WHERE C.Date <= A.Date And Year(C.Date)=Year(A.Date) And C.PayeeID = A.PayeeID AND C.Currency = A.Currency) +
ISNULL((SELECT SUM(AdjC.PermCashAmt)
FROM PermCashInAdjust as AdjC
WHERE AdjC.Date <= AdjA.Date And Year(AdjC.Date)=Year(AdjA.Date) AND AdjC.PayeeID = AdjA.PayeeID AND AdjC.Currency = AdjA.Currency),0) as RunningTotal