【发布时间】:2012-04-01 02:40:56
【问题描述】:
我对 SQL 很陌生,并且正在尝试做一些不愚蠢的事情。为了提供一些背景信息,我正在比较运营商分支中车辆的规划和实现使用,并且需要计算两者的发生情况。我有一个with subquery as,它返回如下内容
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。
【问题讨论】: