2012-03-15 7 views
3

です。私はかなりSQLに慣れていませんし、何かばかげたやり方をしようとしています。いくつかの状況を説明するために、キャリアブランチ内の車両の計画と実現された使用を比較し、両方の発生を数える必要があります。私は、次の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 

のようなものを返し、私は

を返し、次の

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 

を試してみた次

VEHICLE | TOTAL_PLANNED | TOTAL_REALIZED 
--------+---------------+--------------- 
CARRETA | 8    | 5 
TRUCK | 9    | 5 
BI-TREM | 0    | 4 
KOMBI | 0    | 3 

のようなものを返したいwith subquery asを持っています

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を目指しています。

答えて

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 
+0

作品!ちょっと複雑なようですが、もっと多くの人がそれを好きになったからといって答えとして選んだのです。両方の答えを理解するには時間がかかるでしょう... –

+1

Simonのソリューションに必要な2 x(n + 1)の読み込みとは対照的に、*見た目は*より複雑です。 –

1

思う:

select T.VEHICLE, 
     (SELECT count(*) FROM Table AS T1 WHERE T1.PLANNED = T.VEHICLE) AS TOTAL_PLANNED 
     (SELECT count(*) FROM Table AS T2 WHERE T2.REALIZED = T.VEHICLE) AS TOTAL_REALIZED, 
from (SELECT DISTINCT PLANNED AS VEHICLE FROM Table 
     UNION SELECT DISTINCT REALIZED AS VEHICLE FROM Table) AS T 
+0

ありがとうございます、それも動作します!しかし、私は、 'group by 'を使わずに、どのようにしてどのように見つけ出すのかを知る必要があります:) –