我使用的是Oracle 10g,我有一个名为downloads的表,基本上看起来像这样:
ID DOWNLOAD_DATE
1 2011-02-10
2 2011-03-10
3 2011-04-10
4 2011-05-10
5 2011-01-11
6 2011-04-22
7 2011-02-18
8 2011-03-14
9 2011-02-01
10 2011-01-31
等
我想执行一个返回以下内容的查询:
Downloads today
Downloads yesterday
Downloads from start date until today
Downloads on start date
Downloads on day after start date
我想将结果打印在两列中。在第一列中,我想要一个静态标签,就像上面那样。在第二列中,计数。
我尝试过这样的事情:
select count(id) from downloads where download_date = '2007-08-06'
union
select count(id) from downloads where download_date = '2007-08-08'
但这有两个问题。一,它只打印一列,即计数。第二,如果给定日期(或日期范围)没有数据,则不打印任何内容。我需要零打印。
然后我尝试了这样的事情:
select download_date, count(download_date) from downloads where download_date = '2007-08-06'
group by download_date
union
select download_date, count(download_date) from downloads where download_date > '2007-08-08'
group by download_date
这会返回两列,但第一列不是静态的,它是数据库中的一个字段(download_date)。更重要的是,它返回多行进行查询,选择一系列日期(其中download_date>'2007-08-08'),而我只想要一行及其计数。
我该怎么做?
非常感谢, 鲍勃
答案 0 :(得分:3)
首先。请使用Union All
。 Union将删除双重记录,在这种情况下可能不是你想要的。这没关系,但工会一切也更快。 ;)
其次,我不明白为什么你不能只是放入一个静态标签,如下:
select 'Look, static' from dual
然后,您可以编写如下查询:
select
'Downloads today' as Caption,
count(*) as DownloadCount
from
Downloads where trunc(download_date) = trunc(sysdate)
union all
select
'Downloads yesterday'
count(*)
from
Downloads where trunc(download_date) = trunc(sysdate) - 1
如果没有数据,计数将打印0。
答案 1 :(得分:0)
只需在联合版本的每个选项中添加一个静态标签,如下所示:
SELECT 'some label', ...
UNION
...