在sql中加入计数

Bru*_*Kim 3 sql union join

我对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
Run Code Online (Sandbox Code Playgroud)

并希望返回类似以下内容

VEHICLE | TOTAL_PLANNED | TOTAL_REALIZED
--------+---------------+---------------
CARRETA | 8             | 5
TRUCK   | 9             | 5
BI-TREM | 0             | 4
KOMBI   | 0             | 3
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容

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
Run Code Online (Sandbox Code Playgroud)

返回

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
Run Code Online (Sandbox Code Playgroud)

我也使用子查询尝试了所有可用的连接,但没有成功.事实上,RIGHT JOIN工作,但只是因为所有计划的车辆也在实现的方面:如果有一些没有,我会在VEHICLE列上有一个NULL .

感谢任何帮助,即使只是指向SQL命令的指针.

PS.:这个查询必须同时适用于SQL Server和Oracle,所以我正在努力寻找纯SQL.

小智 7

尝试:

SELECT PLANNED_REALIZED AS VEHICLE, 
       SUM(TOTAL_PLANNED) AS TOTAL_PLANNED,
       SUM(TOTAL_REALIZED) AS TOTAL_REALIZED
FROM
(select PLANNED AS PLANNED_REALIZED, 
        1 as TOTAL_PLANNED
        0 as TOTAL_REALIZED
 from subquery
 union all
 select REALIZED as PLANNED_REALIZED,
        0 as TOTAL_PLANNED,
        1 as TOTAL_REALIZED
 from subquery
) SQ
GROUP BY PLANNED_REALIZED
Run Code Online (Sandbox Code Playgroud)