我对SQL很陌生,并且试图做一些事情而不是愚蠢的方式。为了给出一些背景,我正在比较运营商分支机构的规划和实际使用情况,并且需要统计两者的发生情况。我有一个with subquery as
返回类似以下在sql中加入计数
PLANNED | REALIZED
---------+----------
TRUCK | BI-TREM
TRUCK | TRUCK
TRUCK | TRUCK
TRUCK | TRUCK
TRUCK | TRUCK
CARRETA | CARRETA
CARRETA | CARRETA
TRUCK | KOMBI
TRUCK | BI-TREM
CARRETA | KOMBI
CARRETA | KOMBI
TRUCK | TRUCK
CARRETA | CARRETA
CARRETA | BI-TREM
CARRETA | CARRETA
CARRETA | CARRETA
TRUCK | BI-TREM
,想返回类似以下
VEHICLE | TOTAL_PLANNED | TOTAL_REALIZED
--------+---------------+---------------
CARRETA | 8 | 5
TRUCK | 9 | 5
BI-TREM | 0 | 4
KOMBI | 0 | 3
我已经试过以下
select PLANNED,
count(*) as TOTAL_PLANNED
null as REALIZED,
0 as TOTAL_REALIZED
from subquery
group by PLANNED
union all
select null as PLANNED,
0 as TOTAL_PLANNED,
REALIZED,
count(*) as TOTAL_REALIZED
from subquery
group by REALIZED
返回
CARRETA 8 NULL 0
TRUCK 9 NULL 0
NULL 0 BI-TREM 4
NULL 0 CARRETA 5
NULL 0 TRUCK 5
NULL 0 KOMBI 3
我也尝试了使用子查询的所有可用连接,但没有成功。事实上,RIGHT JOIN
的作品,但只是因为所有计划的车辆也在实现方面:如果有一些没有,我会在VEHICLE
列有一个NULL。
感谢您的帮助,即使只是一个指向SQL命令的指针。
PS:这个查询必须同时在SQL Server和Oracle上工作,所以我在努力争取纯SQL。
这一工程!这似乎有点复杂,我选择答案是因为更多的人喜欢它。这需要一些时间来理解这两个答案...... – 2012-03-15 16:17:33
它可能*看起来*更复杂,但它只需要两次读取表格,而不是2次(n + 1)读取Simon解决方案所需的读数。 – 2012-03-15 16:52:28