0

次の3つのテーブルがあります

ファイル テーブル

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 つのレコードが見つかったので、経費の他の行には null が含まれ、その逆も同様です

どうやって??

4

2 に答える 2

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
于 2012-08-07T08:17:03.873 に答える
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) でこれらの値を結合して、1 つのインスタンスのみが結合されるようにします。これにより、3 つのテーブル間の通常の INNER JOIN で発生する問題が解消されます。

どのテーブル (Payment または Expense) に最も多くのレコードがあるかによって、順序付けが問題になる場合があります。

テストしたらどうなるか教えてください。

于 2012-08-07T12:51:16.933 に答える