两列SQL计数查询,第一列具有静态标签

两列SQL计数查询,第一列具有静态标签,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我正在使用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 selec

我正在使用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
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
SELECT 'some label', ...
 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
等等

我希望执行一个返回以下内容的查询:

Downloads today
Downloads yesterday
Downloads from start date until today
Downloads on start date
Downloads on day after start date
我想将结果打印在两列中。在第一列中,我想放置一个静态标签,就像上面的标签一样。第二列是计数

我试过这样的方法:

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
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
SELECT 'some label', ...
 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
但这有两个问题。一,它只打印一列,计数。第二,如果给定日期(或日期范围)没有数据,则不打印任何内容。我需要打印一个零

然后我尝试了这样的方法:

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
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
SELECT 'some label', ...
 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
这将返回两列,但第一列不是静态的,它是数据库中的一个字段(下载日期)。更重要的是,它返回多行用于选择日期范围的查询(其中download_date>'2007-08-08'),而我只需要一行及其计数

我该怎么做

非常感谢,,
Bob

只需在union版本中的每个选项中添加一个静态标签,如下所示:

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
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
SELECT 'some label', ...
 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

首先。为此使用
Union All
。Union将删除双记录,这可能不是您在本例中想要的。这没什么大不了的,但工会的速度也更快

第二,我不明白为什么你不能只放一个静态标签,像这样:

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
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
SELECT 'some label', ...
 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
然后,您可以编写如下查询:

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
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
SELECT 'some label', ...
 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