以下に示すように、値を持つ2つのテーブルがあります
tblIncome(日付,収入)
- 2012/12/02 1000
- 2012/02/14 2000
- 2012/10/03 1500
- 2012/05/03 5000
tblExpense(日付,経費)
- 2012/05/02 1200
- 2012/10/02 1000
- 2012/03/15 2000
期待される結果は (月、収入、支出)
- 2月 3000 2200
- 3月 6500 2000
以下に示すように、値を持つ2つのテーブルがあります
tblIncome(日付,収入)
tblExpense(日付,経費)
期待される結果は (月、収入、支出)
あなたの質問は「カレンダーテーブル」を求めています。この用語はコミュニティで知られており、グーグルは多くのヒットを与えるでしょう。
これは私の見た目です
必要な他の月の表を(できればスクリプトを使用して)完成させます
それが整ったら、このスクリプトで以下のクエリを実行して、結果を得ることができます
CREATE TABLE [dbo].[Calendar](
[MonthName] [varchar](20) NULL,
[StartdateInclusive] [datetime] NULL,
[EnddateExclusive] [datetime] NULL
)
INSERT [dbo].[Calendar] ([MonthName], [StartdateInclusive], [EnddateExclusive]) VALUES (N'February', CAST(0x00009FEA00000000 AS DateTime), CAST(0x0000A00700000000 AS DateTime))
INSERT [dbo].[Calendar] ([MonthName], [StartdateInclusive], [EnddateExclusive]) VALUES (N'March', CAST(0x0000A00700000000 AS DateTime), CAST(0x0000A02600000000 AS DateTime))
CREATE TABLE [dbo].[tblIncome](
[Date] [datetime] NULL,
[Income] [money] NULL
)
INSERT [dbo].[tblIncome] ([Date], [Income]) VALUES (CAST(0x00009FF500000000 AS DateTime), 1000.0000)
INSERT [dbo].[tblIncome] ([Date], [Income]) VALUES (CAST(0x00009FF700000000 AS DateTime), 2000.0000)
INSERT [dbo].[tblIncome] ([Date], [Income]) VALUES (CAST(0x0000A01000000000 AS DateTime), 1500.0000)
INSERT [dbo].[tblIncome] ([Date], [Income]) VALUES (CAST(0x0000A00B00000000 AS DateTime), 5000.0000)
CREATE TABLE [dbo].[tblExpense](
[Date] [datetime] NULL,
[Expense] [money] NULL
)
INSERT [dbo].[tblExpense] ([Date], [Expense]) VALUES (CAST(0x00009FEE00000000 AS DateTime), 1200.0000)
INSERT [dbo].[tblExpense] ([Date], [Expense]) VALUES (CAST(0x00009FF300000000 AS DateTime), 1000.0000)
INSERT [dbo].[tblExpense] ([Date], [Expense]) VALUES (CAST(0x0000A01500000000 AS DateTime), 2000.0000)
SELECT MonthName ,
SUM(Income) ,
SUM(Expense)
FROM ( SELECT MonthName ,
i.Income ,
NULL AS Expense
FROM dbo.Calendar c
LEFT JOIN dbo.tblIncome i ON c.StartdateInclusive <= i.Date
AND i.Date < c.enddateExclusive
UNION
SELECT MonthName ,
NULL ,
e.Expense AS Expense
FROM dbo.Calendar c
LEFT JOIN dbo.tblExpense e ON c.StartdateInclusive <= e.Date
AND e.Date < c.enddateExclusive
) AS d
GROUP BY MonthName