Sql 加入到相同的表匹配日期范围
船舶每天都有“p”乘客到达港口。每艘船都有一个名字“N”,每天最多到达一次。 我有一个数据表,因此:Sql 加入到相同的表匹配日期范围,sql,sql-server-2008,date,join,Sql,Sql Server 2008,Date,Join,船舶每天都有“p”乘客到达港口。每艘船都有一个名字“N”,每天最多到达一次。 我有一个数据表,因此: Date N P 2013-11-27 A 12 2013-11-27 G 16 2013-11-27 B 56 2013-11-28 A 10 2013-11-29 B 19 2013-11-29 A 19 2013-11-3
Date N P
2013-11-27 A 12
2013-11-27 G 16
2013-11-27 B 56
2013-11-28 A 10
2013-11-29 B 19
2013-11-29 A 19
2013-11-30 G 18
2013-11-30 B 13
2013-11-30 A 11
我想在给定的时间跨度内比较一艘船的“A”乘客数和另一艘船的“B”乘客数,但仅当他们在同一天到达时。所以结果是
Date PA PB
2013-11-27 12 56
2013-11-29 19 19
2013-11-30 11 13
注28日无“B”,因此未报告(反之亦然)
同一个表上的某种外部联接
SELECT A.Date, A.P as PA, B.P AS PB
FROM Arrivals A OUTER JOIN Arrivals B ON A.Date = B.Date
WHERE ... ???
Date >= @start AND Date <= @end AND
A.N = 'A' AND B.N = 'B'
选择A.日期,A.P作为PA,B.P作为PB
从到达A外部连接到达B在A.日期=B.日期
哪里
日期>=@start和Date这行吗
SELECT A.Date, A.P as PA, B.P AS PB
FROM (Select * FROM Arrivals WHERE N = 'A') A
INNER JOIN (Select * FROM Arrivals WHERE N = 'B') B
ON A.Date = B.Date
试试这个:
create table #tmp
(
dt date,
n varchar (1) ,
p int
)
GO
insert into #tmp
values
('2013-11-27' , 'A' , 12),
('2013-11-27' , 'G' , 16),
('2013-11-27' , 'B' , 56),
('2013-11-28' , 'A' , 10),
('2013-11-29' , 'B' , 19),
('2013-11-29' , 'A' , 19),
('2013-11-30' , 'G' , 18),
('2013-11-30' , 'B' , 13),
('2013-11-30' , 'A' , 11)
GO
select distinct
a.dt,
(select SUM(p) from #tmp y where y.dt = a.dt and y.n = 'A') pa,
(select SUM(p) from #tmp y where y.dt = a.dt and y.n = 'B') pb,
(select SUM(p) from #tmp y where y.dt = a.dt and y.n = 'G') pG
from #tmp a
group by a.dt, a.n
Go
drop table #tmp
请澄清你的问题,不确定你在问什么?您是否正在请求将给出表中列出的结果的查询?您看到了什么错误?@start
和@end
是否具有有效的日期值?你期望什么而不是代码>?我不知道你回答了什么。是的。我需要更多地考虑子查询。谢谢你,乔。
;WITH ARRIVAL_A AS
(SELECT DATE, P FROM ARRIVALS WHERE N = 'A'),
ARRIVAL_B AS
(SELECT DATE, P FROM ARRIVALS WHERE N = 'B')
SELECT ARRIVAL_A.DATE, ARRIVAL_A.P [PA], ARRIVAL_B.P [PB]
FROM ARRIVAL_A INNER JOIN ARRIVAL_B
ON ARRIVAL_A.DATE = ARRIVAL_B.DATE