0

データベース結合クエリに問題があり、助けてくれる人を探しています。

基本的に、請求書と領収書の2つのテーブルがあります。

請求書

Invoice ID
Amount
Date_Added

領収書

ReceiptID
InvoiceID
Amount
Date_Added

以下のようなテーブルを作成する必要がありますが、レシートに複数のレコードがあり、クエリがどのようになるか正確にはわからないため、データが適切に保存されていると確信しています。

InvoiceID   RecieptID    Amount     Balance     Date_Added
1           0            100.00     100.00      01.05.2012
1           1            100.00     0.00        02.05.2012
2           0            250.00     250.00      03.05.2012
3           0            100.00     350.00      04.05.2012
2           2            100.00     250.00      05.05.2012

これは意味がありますか?したがって、日付順にする必要があります。とても効果的に、私は各日付で何が起こっているかを行ごとに見ることができます。

4

2 に答える 2

2

設定:

USE tempdb;
GO

CREATE TABLE dbo.Invoices
(
  InvoiceID INT,
  Amount DECIMAL(12,2),
  DateAdded SMALLDATETIME
);

CREATE TABLE dbo.Receipts
(
  ReceiptID INT,
  InvoiceID INT,
  Amount DECIMAL(12,2),
  DateAdded SMALLDATETIME
);

SET NOCOUNT ON;

INSERT dbo.Invoices SELECT 1, 100, '20120501'
UNION ALL SELECT 2, 250, '20120503'
UNION ALL SELECT 3, 100, '20120504';

INSERT dbo.Receipts SELECT 1, 1, 100, '20120502'
UNION ALL SELECT 2, 2, 100, '20120505';

クエリ:

;WITH x AS 
(
  SELECT InvoiceID, ReceiptID, Amount, DateAdded, 
   rn = ROW_NUMBER() OVER (ORDER BY DateAdded)
  FROM
  (
    SELECT InvoiceID, ReceiptID = 0, Amount, DateAdded
    FROM dbo.Invoices -- where clause?
    UNION ALL 
    SELECT InvoiceID, ReceiptID, Amount, DateAdded
    FROM dbo.Receipts -- where clause?
  ) AS y
),
z AS
(
  SELECT xrn = x.rn, x.InvoiceID, x.ReceiptID, x.Amount, x.DateAdded, 
    PlusMinus = CASE WHEN x.ReceiptID > 0 THEN -x.Amount ELSE x.Amount END
    FROM x LEFT OUTER JOIN x AS x2
    ON x.rn = x2.rn + 1
)
SELECT InvoiceID, ReceiptID, Balance = (
  SELECT SUM(COALESCE(PlusMinus, Amount)) 
  FROM z AS z2 
  WHERE z2.xrn <= z.xrn
), Amount, DateAdded
FROM z
ORDER BY DateAdded;

掃除:

DROP TABLE dbo.Invoices, dbo.Receipts;
于 2012-05-01T22:34:58.717 に答える
-1

DBがoracleの場合のように、2つのテーブルからデータを選択するビューを作成できます。

CREATE VIEW INVOICE_RECPT_VIEW as 
select a.InvoiceID, b.RecieptID, b.Amount, b.Date_Added 
from invoices a, receipts b 
where a.InvoiceID = b.InvoiceID 
order by Date_Added
于 2012-05-01T22:16:28.307 に答える