Sql server SQL Server将4个表中的值合并到一个表中
我有5张桌子:Sql server SQL Server将4个表中的值合并到一个表中,sql-server,Sql Server,我有5张桌子: 1- UserAccount : Has AccountNumber field 2- Total Amount : Has AccountNumber field 3- Total Withdrawal : Has AccountNumber field 4- Total Profit : Has AccountNumber field 5- Balance : Has AccountNumber field 我需要在一个表中获得每个用户的[总金额]、[总取款]、[总利润]和
1- UserAccount : Has AccountNumber field
2- Total Amount : Has AccountNumber field
3- Total Withdrawal : Has AccountNumber field
4- Total Profit : Has AccountNumber field
5- Balance : Has AccountNumber field
我需要在一个表中获得每个用户的[总金额]、[总取款]、[总利润]和[余额]值,如下所示:
AccountNumber Balance Total Amount Total Withdrawal Total Profit
----------------------------------------------------------------------------------
201 450 600 150 250
222 600 800 200 150
我使用了此查询,但结果不正确:
SELECT DISTINCT
dbo.useraccount.AccountNumber,
dbo.useraccount.FirstName,
dbo.useraccount.SecondName,
dbo.Balance.Balance,
sum(dbo.[Total Amount].DepositTotal) AS [Total Deposit],
Sum(dbo.[Total Profit].ProfitTotal) AS [Total Profit],
Sum(dbo.[Total Withdrawal].WithdrawalTotal) AS [Total Withdrawal]
FROM
dbo.useraccount ,
dbo.Balance ,
dbo.[Total Amount] ,
dbo.[Total Profit] ,
dbo.[Total Withdrawal]
WHERE
dbo.useraccount.AccountNumber = dbo.Balance.AccountNumber AND
dbo.useraccount.AccountNumber = dbo.[Total Amount].AccountNumber AND
dbo.useraccount.AccountNumber = dbo.[Total Profit].AccountNumber AND
dbo.useraccount.AccountNumber = dbo.[Total Withdrawal].AccountNumber
GROUP BY
dbo.useraccount.AccountNumber,
dbo.useraccount.FirstName,
dbo.useraccount.SecondName,
dbo.Balance.Balance
需要帮忙吗
我得到的结果是这样的:
AccountNumber Balance Total Amount Total Withdrawal Total Profit
-----------------------------------------------------------------------
201 5316.52 291060.00 86328.20 51150.00
220 35000.00 2086400.00 648000.00 532800.00
221 12000.00 192000.00 44548.00 44548.00
222 8500.00 76500.00 12003.75 12003.75
224 4000.00 484000.00 120780.00 120780.00
226 2393.50 48000.00 5206.50 10736.00
当我对[Total Profit]运行此查询时,我得到了正确的结果:
SELECT DISTINCT
dbo.[Total Profit].AccountNumber,
Sum(dbo.[Total Profit].ProfitTotal) As [Total Deposit]
FROM
dbo.[Total Profit]
GROUP BY
dbo.[Total Profit].AccountNumber
好的,鉴于您尚未发布表定义,您可以这样做以避免行的重复:
SELECT UA.AccountNumber,
UA.FirstName,
UA.SecondName,
B.Balance,
TA.DepositTotal [Total Deposit],
TP.ProfitTotal [Total Profit],
TW.WithdrawalTotal [Total Withdrawal]
FROM dbo.useraccount UA
LEFT JOIN ( SELECT AccountNumber, SUM(Balance) Balance
FROM dbo.Balance
GROUP BY AccountNumber) B
ON UA.AccountNumber = B.AccountNumber
LEFT JOIN ( SELECT AccountNumber, SUM(DepositTotal) DepositTotal
FROM dbo.[Total Amount]
GROUP BY AccountNumber) TA
ON UA.AccountNumber = TA.AccountNumber
LEFT JOIN ( SELECT AccountNumber, SUM(ProfitTotal) ProfitTotal
FROM dbo.[Total Profit]
GROUP BY AccountNumber) TP
ON UA.AccountNumber = TP.AccountNumber
LEFT JOIN ( SELECT AccountNumber, SUM(WithdrawalTotal) WithdrawalTotal
FROM dbo.[Total Withdrawal]
GROUP BY AccountNumber) TW
ON UA.AccountNumber = TW.AccountNumber
当然,您不需要对每个表进行聚合,只需要对每个AccountNumber具有多行的表进行聚合。Alias man。别名。结果不正确。。你能多吃点吗?预期的结果是什么,或者有什么问题。别名会使阅读更容易。如果使用隐式联接,则应该进行显式联接。你得到的结果有什么问题。只要你能解释为什么你想要的结果不正确,我就会在我的答案中解释别名。例如,每个用户的总利润显示了一个巨大的数字,我不知道这个数字来自何方!!获取此错误:[Err]42S22-[SQL Server]列名“Balance”无效。@TamerSherif yes,在我的选择中有一个额外的列,现已更正完美!!它起作用了……谢谢你: