Sql server SQL查询构造

Sql server SQL查询构造,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我有三张桌子。我想从所有这些表中获取数据,并将其放入虚拟表中。我正在使用SQL Server 2012。 很抱歉,如果我的格式或标记错误,因为我遇到错误堆栈溢出需要来自另一个源域的外部javascrip,该域被阻止,无法加载。 预订表 BookingId | date ====================== 2 | 7/1/2017 (MM/dd/yyyy) 3 | 7/1/2017 Id | bookinId | Cost

我有三张桌子。我想从所有这些表中获取数据,并将其放入虚拟表中。我正在使用SQL Server 2012。 很抱歉,如果我的格式或标记错误,因为我遇到错误
堆栈溢出需要来自另一个源域的外部javascrip,该域被阻止,无法加载。

预订表

BookingId   |   date
======================
2           |   7/1/2017 (MM/dd/yyyy)
3           |   7/1/2017
Id  |   bookinId | Cost
==========================
1   |   2        | 2000
2   |   3        | 4000
Id  |   ExpenseCost | Date
======================
1   |   1400        | 7/2/2017 (MM/dd/yyyy)
2   |   1422        | 7/1/2017
3   |   4000        | 6/3/2017
预订成本表

BookingId   |   date
======================
2           |   7/1/2017 (MM/dd/yyyy)
3           |   7/1/2017
Id  |   bookinId | Cost
==========================
1   |   2        | 2000
2   |   3        | 4000
Id  |   ExpenseCost | Date
======================
1   |   1400        | 7/2/2017 (MM/dd/yyyy)
2   |   1422        | 7/1/2017
3   |   4000        | 6/3/2017
费用表

BookingId   |   date
======================
2           |   7/1/2017 (MM/dd/yyyy)
3           |   7/1/2017
Id  |   bookinId | Cost
==========================
1   |   2        | 2000
2   |   3        | 4000
Id  |   ExpenseCost | Date
======================
1   |   1400        | 7/2/2017 (MM/dd/yyyy)
2   |   1422        | 7/1/2017
3   |   4000        | 6/3/2017
我想得到如下表所示的每月结果

Date        | Expense  | Bookings
===================================
jan/2017    |   0      |    0
feb/2017    |   0      |    0
    .       |   .      |    .
    .       |   .      |    .
    .       |   .      |    .
jun/2017    |   4000   |    0
jul/2017    |   2822   |    6000    
    .       |   .      |    .
    .       |   .      |    .
    .       |   .      |    .

为了获得0个计数,您可以将总数加入到一个包含一年中所有月份的计数表中

sql用于转换日期

例如:


我使用的测试数据

declare @Booking table (BookingId int, [date] date);
insert into @Booking (BookingId,[date]) values (2,'2017-07-01'),(3,'2017-07-01');
declare @BookingCost table (Id int, BookingId int, Cost int);
insert into @BookingCost (Id, BookingId, Cost) values (1,2,2000),(2,3,4000);
declare @Expense table (Id int, ExpenseCost int, [Date] date);
insert into @Expense (Id, ExpenseCost, [Date]) values
(1,1400,'2017-07-02'),(2,1422,'2017-07-01'),(3,4000,'2017-06-03');

是这样的(假设您的日期是日期类型而不是VARCHAR,否则您可以转换它们)


你试过一个问题了吗?这三个表之间的关系是什么?BookingId是booking表中的主键。和预订成本表中的外键。。。费用表是independent@TimBiegeleisen我只有日期来访问预订和费用。我想您需要告诉我们
费用
与其他表的关系。费用是独立的。。与任何表都不相关。。我在特定日期范围内获得费用。只是食物上有点额外的香料。。。不是软件中的主要角色。我的日期是日期类型。。我只想把它们显示为月份和年份。。想把这个月的所有金额加起来,并显示为一条记录。。我正在测试你的查询。。请等待你的答案是工作正常,但不正常。。在第12行的末尾添加)。。第二个查询正在按天返回数据。。我需要整整一个月排一排。。第三个查询显示的数据日期错误。。例如,我在2017年6月20日节省了39956的预订成本,但查询显示的是2017年6月15日。。。另外,我有2项25日的费用。。。查询是对它们进行汇总,并根据日期20显示。。。意思是5天减法。很抱歉,我不知道我在想什么。我已经修复了缺少的括号,并将日期改为月份。它返回月1日,然后您可以通过各种方式将其转换为所需格式。谢谢兄弟。。它就像一个符咒。。。但有一件事。。。交换第8行和第13行的名称。您将费用放入“预订”列,反之亦然。其他一切都很好。。谢谢兄弟。。。