我有這兩張桌子。我需要合并到一張表中。我應該在哪里填寫兩個日期之間的費用金額。我該怎么做?
利潤:
| ID | 日期 | 錢 |
|---|---|---|
| 1 | 01.01.2022 | 100 |
| 2 | 2022 年 1 月 15 日 | 50 |
| 3 | 25.01.2022 | 30 |
花費:
| ID | 日期 | 錢 |
|---|---|---|
| 1 | 01.01.2022 | 20 |
| 2 | 03.01.2022 | 30 |
| 3 | 2022 年 1 月 30 日 | 40 |
結果:
| ID | 日期 | 利潤 | 費用(總和) |
|---|---|---|---|
| 1 | 01.01.2022 | 100 | 50 |
| 2 | 2022 年 1 月 15 日 | 50 | |
| 3 | 25.01.2022 | 30 | 40 |
uj5u.com熱心網友回復:
以下陳述句是一個可能的選項:
資料:
SELECT *
INTO Profits
FROM (VALUES
(1, CONVERT(date, '01.01.2022', 104), 100),
(2, CONVERT(date, '15.01.2022', 104), 50),
(3, CONVERT(date, '25.01.2022', 104), 30)
) v (Id, [Date], [Money])
SELECT *
INTO Expenses
FROM (VALUES
(1, CONVERT(date, '01.01.2022', 104), 20),
(2, CONVERT(date, '03.01.2022', 104), 30),
(3, CONVERT(date, '30.01.2022', 104), 40)
) v (Id, [Date], [Money])
陳述:
SELECT p.Id, p.Date, p.Money AS Profits, SUM(e.Money) AS Expenses
FROM (
SELECT *, LEAD(Date) OVER (ORDER BY Date) AS NextDate
FROM Profits
) p
LEFT JOIN Expenses e ON p.Date <= e.Date AND (e.Date <= p.NextDate OR p.NextDate IS NULL)
GROUP BY p.Id, p.Date, p.Money
結果:
| ID | 日期 | 利潤 | 花費 |
|---|---|---|---|
| 1 | 2022-01-01 | 100 | 50 |
| 2 | 2022-01-15 | 50 | |
| 3 | 2022-01-25 | 30 | 40 |
對于 SQL Server 2008,您必須替換LEAD()為自連接(列中沒有間隙時的簡化方法Id):
SELECT p.Id, p.Date, p.Money AS Profits, SUM(e.Money) AS Expenses
FROM (
SELECT p1.*, p2.Date AS NextDate
FROM Profits p1
LEFT JOIN Profits p2 ON p1.Id = p2.Id - 1
) p
LEFT JOIN Expenses e ON p.Date <= e.Date AND (e.Date <= p.NextDate OR p.NextDate IS NULL)
GROUP BY p.Id, p.Date, p.Money
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488161.html
