我有一个包含三列的SQL表
id,balance,datetime 我希望通过给出持续时间来从表中获取数据。假设我想在2013年1月1日到2013年1月15日之间获取数据。给出的数据表如下:
#id Datetime Balance #
1 1/1/2013 1500
2 1/2/2013 2000
3 1/4/2013 1500
4 1/5/2013 2500
现在我希望输出为
#id Datetime Balance #
1 1/1/2013 1500
2 1/2/2013 2000
3 1/3/2013 0
4 1/4/2013 1500
5 1/5/2013 2500
我想显示所有日期,如果日期没有余额。它显示O或null值
答案 0 :(得分:1)
我会删除ID列,因为当你添加额外的行并执行类似的操作时它没用:
set dateformat mdy
declare @tmpTable table (dates date)
declare @startDate date = '1/1/2013'
declare @endDate date = '1/15/2013'
while @startDate <= @endDate
begin
insert into @tmpTable (dates) values (@startDate)
set @startDate = DATEADD(DAY, 1, @startDate)
end
select tmp.dates, yourtable.balance
from @tmpTable as tmp
left outer join yourTable on yourTable.[Datetime] = tmp.dates
where yourtable.[Datetime] between @startDate and @endDate
答案 1 :(得分:0)
我不确定您使用的是什么样的SQL,但是您可以使用所有日期的表格并对其进行外部联接。例如,如果您有一个名为“日期”的所有日期表,那么您可以这样做:
从table1 t选择id,dateTime,balance t t ttate = D.dateTime的RIGHT JOIN Dates d 其中t.dateTime BETWEEN'1 / 1/2013'和'1/5/2013'
答案 2 :(得分:0)
您可以通过创建一个cte,其中包含日期范围和外部日期之间的日期,并将其与您的表格连接。
with cte as
(
select start_date dt
union all
select dateadd(dd,1,dt) from cte where dt < end_date
)
select id, cte.dt, balance from cte left outer join yourtable b on cte.dt = b.date;