0

以下に示すように、値を持つ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
4

1 に答える 1

0

あなたの質問は「カレンダーテーブル」を求めています。この用語はコミュニティで知られており、グーグルは多くのヒットを与えるでしょう。

これは私の見た目です

ここに画像の説明を入力してください

必要な他の月の表を(できればスクリプトを使用して)完成させます

それが整ったら、このスクリプトで以下のクエリを実行して、結果を得ることができます

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
于 2012-05-27T12:05:18.977 に答える