相同的表SQL联接

相同的表SQL联接,sql,join,select,Sql,Join,Select,我有两个select语句,我的目的是显示账单金额和罚款金额。可以使用连接来完成吗 SELECT SUM([Amount]) AS 'BILLING',(SELECT SUM([Amount]) FROM Transactions WHERE CAST([TransactionDate] AS DATE)>(SELECT TOP 1 CAST([Transactio

我有两个select语句,我的目的是显示账单金额和罚款金额。可以使用连接来完成吗

SELECT SUM([Amount]) AS 'BILLING',(SELECT SUM([Amount])
                                FROM Transactions
                                WHERE CAST([TransactionDate] AS DATE)>(SELECT TOP 1 CAST([TransactionDate] AS DATE)  
                                FROM Transactions WHERE CustNo = 6313 AND [Particulars]='Payment' ORDER BY [Id] DESC) 
                                AND [CustNo]=6313 
                                AND [Particulars]='Penalty') AS 'PENALTY'
FROM Transactions
WHERE CAST([TransactionDate] AS DATE)>(SELECT TOP 1 CAST([TransactionDate] AS DATE)  
FROM Transactions WHERE CustNo = 6313 
AND [Particulars]='Payment' ORDER BY [Id] DESC) 
AND [CustNo]=6313 
AND [Particulars]='Billing'

您可以使用条件聚合:

SELECT SUM(CASE WHEN [Particulars]='Billing' THEN [Amount] ELSE 0 END) AS 'BILLING',
       SUM(CASE WHEN [Particulars]='Penalty' THEN [Amount] ELSE 0 END) AS 'PENALTY',
FROM Transactions
WHERE CAST([TransactionDate] AS DATE)>(SELECT TOP 1 CAST([TransactionDate] AS DATE)  
FROM Transactions WHERE CustNo = 6313 
AND [Particulars]='Payment' ORDER BY [Id] DESC) 
AND [CustNo]=6313 
AND [Particulars]='Billing'
是的,它可以。那么,你满意吗?您的实际1具体非重复问题是什么?请在代码问题中给出一个--cut&paste&runnable代码;示例输入(作为初始化代码)以及所需和实际输出(包括逐字错误消息);标签和版本;清晰的说明和解释。对于包含最少代码的错误,您可以给出“显示为OK”的代码,并通过“显示为not OK”的代码进行扩展。(调试基础。)用于包含DBMS和DDL的SQL,其中包括约束、索引和表格初始化。