Sql 从多个子查询添加多个结果
我正在运行SQL Server查询,以获取交易金额、未决金额和额外金额的总和。我发现最好的解决方案是使用子查询,因此我也使用子查询,这是最快的方法。然而,尽管我可以从每个子查询中提取金额,但我不知道如何将它们相加,以便按总数排序 以下是当前的查询:Sql 从多个子查询添加多个结果,sql,sql-server,Sql,Sql Server,我正在运行SQL Server查询,以获取交易金额、未决金额和额外金额的总和。我发现最好的解决方案是使用子查询,因此我也使用子查询,这是最快的方法。然而,尽管我可以从每个子查询中提取金额,但我不知道如何将它们相加,以便按总数排序 以下是当前的查询: SELECT *, trans + pend + extra AS totalamount FROM (SELECT (SELECT trnammt FROM Tbl_Emi
SELECT
*, trans + pend + extra AS totalamount
FROM
(SELECT
(SELECT trnammt
FROM Tbl_Emi
WHERE Status IN ('N', 'P')
AND lastrecdate = (CAST(GETDATE() AS DATE))
AND CardNo = CardNo) AS TRANS,
(SELECT pendamt
FROM Tbl_Emi
WHERE Status IN ('N', 'P')
AND lastrecdate = (CAST(GETDATE() AS DATE))
AND CardNo = CardNo) AS PEND,
(SELECT extraamt
FROM Tbl_Emi
WHERE Status IN ('N', 'P')
AND lastrecdate = (SELECT MIN(lastrecdate) FROM Tbl_Emi)
AND CardNo = CardNo) AS EXTRA
FROM
Tbl_Emi) q
我需要将trans、pend和extra相加,得到“totalamount”。SQL Server不允许您使用简单的语法对别名进行计算,但我认为还有另一种方法可以做到这一点?如果您只想要
trans+pend+extra
的总和,则需要更改条件部分
SELECT CASE WHEN (lastrecdate = (CAST(GETDATE() AS DATE))
AND CardNo = CardNo) THEN trnammt
ELSE 0
END +
CASE WHEN (pendamt = (CAST(GETDATE() AS DATE))
AND CardNo = CardNo) THEN trnammt
ELSE 0
END +
CASE WHEN (lastrecdate = (SELECT MIN(lastrecdate) FROM Tbl_Emi)
AND CardNo = CardNo) THEN trnammt
ELSE 0
END AS totalamount
WHERE Status IN ('N','P')
以下是我可以很容易看到的三个问题:
- 子查询没有聚合,因此如果它们返回多行,您将得到一个错误
- 相关条件只引用子查询(因此它们不是真正相关的)
- 结果可能是
,因此总和将是NULL
NULL
SELECT e.*,
(COALESCE(trans, 0) + COALESCE(pend, 0) + COALESCE(extra, 0)) AS totalamount
FROM (
SELECT (
SELECT SUM(trnammt)
FROM Tbl_Emi e2
WHERE Status IN ('N','P')
AND lastrecdate = (CAST(GETDATE() AS DATE))
AND e2.CardNo = e.CardNo
) AS trans,
(
SELECT sum(pendamt)
FROM Tbl_Emi e2
WHERE Status IN ('N','P')
AND lastrecdate = (CAST(GETDATE() AS DATE))
AND e2.CardNo = e.CardNo
) AS pend,
(
SELECT sum(extraamt)
FROM Tbl_Emi e2
WHERE Status IN ('N','P')
AND lastrecdate = (SELECT MIN(lastrecdate) FROM Tbl_Emi)
AND e2.CardNo = e.CardNo
) AS extra
FROM Tbl_Emi e
) e
你需要分别使用trans、pend和extra吗?没关系,重要的是结果应该是它们的总和。那么,当所有数据存储在一个表中时,你为什么需要作为子查询?你可以通过简单的查询获得它们,因为你可以看到最后一个子查询具有不同的条件,因此,它不能全部假脱机在一起。您从问题中的代码示例中得到的实际错误消息是什么?