我有以下三个表
文件表
FileId
FileNo
付款表
Id
Amount
FK_FileID
费用表
Id
Amount
FK_FileID
我想输出
FileNo Payment_Amount Expense_Amount
10001 220 150
10001 120 NULL
10001 150 NULL
我想检索文件付款和费用数据。 我在费用中找到了1条记录,在付款方面有3条记录,所以费用的另一行包括空,反之亦然
我该怎么办?
答案 0 :(得分:0)
使用以下查询...
Select f.FileNo,p.Amount as Payment_Amount,e.Amount as Expense_Amount From File f inner join Payment p ON f.FileId = p.FK_FileID inner join Expense e on e.FileId = p.FK_FileID
答案 1 :(得分:0)
我相信以下内容应该得到你想要的东西,它有点奇怪,但由于付款和费用之间没有关系,所以你必须分开进行,然后加入。您可以使用子SELECT语句执行此操作,但我使用临时表以便于阅读。
SELECT F.FileNo, F.FileId, P.Amount,
ROW_NUMBER() OVER (PARTITION BY P.FileId order by P.Id) AS Row
INTO #Payments
FROM File F
INNER JOIN Payment P ON F.FileId = P.FileId
SELECT F.FileNo, F.FileId, E.Amount,
ROW_NUMBER() OVER (PARTITION BY E.FileId order by E.Id) AS Row
INTO #Expenses
FROM File F
INNER JOIN Expense E ON F.FileId = E.FileId
SELECT COALESCE(tP.FileNo, tE.FileNo) AS FileNo,
tP.amount AS Payment_Amount,
tE.amount AS Expense_Amount
FROM #Payments tP
FULL JOIN #Expenses tE ON tP.FileId = tE.FileId AND tP.Row = tE.Row
我使用ROW_NUMBER()来获取一个数字,该数字取决于可能属于给定文件的每个付款和费用记录的FileID。然后我在FULL JOIN(以及FileID)中加入这些值,以便只连接一个实例,这消除了三个表之间正常的INNER JOIN导致的问题。
订购可能是一个问题,因为它取决于哪个表(付款或费用)记录最多。
让我知道你测试时的情况。