0

以下の表があり、以下に示すようにプレーンSQLを使用して出力を取得する必要があります。2の同じ値のいずれかcolumnCに「Y」がある場合、成功カウントは+1である必要があります。そうでない場合は、失敗カウント列に追加する必要があります。出力。以下に説明するように出力を取得するSQLを(Oracleで)作成できますか?今のところ無視することができます。ColumnAColumnD

1.テーブル

ColumnA   ColumnB    ColumnC    ColumnD     File_type
--------  ---------  --------   ----------  ------------
11111     A          N          NULL        typeA
11111     B          N          NULL        typeA
11111     C          Y          SPILL       null
11111     D          N          NULL        typeA
22222     A          N          SPILL       typeA
22222     B          Y          SPILL       typeA
22222     C          N          NULL        null
22222     D          N          NULL        typeA
33333     A          N          NULL        typeA
33333     B          N          NULL        null
33333     C          N          NULL        typeA
33333     D          N          NULL        typeA
111110    A          N          NULL        typeB
111110    B          N          NULL        typeB
111110    C          Y          SPILL       null
111110    D          N          NULL        typeB
222220    A          N          SPILL       typeB
222220    B          Y          SPILL       typeB
222220    C          N          NULL        null
222220    D          N          NULL        typeB
333330    A          N          NULL        typeB
333330    B          N          NULL        null
333330    C          Y          SPILL       typeB
333330    D          N          NULL        typeB

2.必要な出力

File_type        ColumnD  Success_cnt    Fail_cnt
----------       -------- -----------    -----------
typeA             SPILL         2          1
typeB             SPILL         3      
4

4 に答える 4

0

これがあなたの仕事を理解するための私の試みです:

SELECT r.File_type, SUM(CASE WHEN r.cnt > 0 THEN 1 ELSE 0 END) success, 
                    SUM(CASE WHEN r.cnt = 0 THEN 1 ELSE 0 END) fail
FROM
(SELECT t.File_type,  SUM(CASE WHEN t.ColumnC = 'Y' THEN 1 ELSE 0 END) cnt
FROM Table1 t
WHERE t.File_type IS NOT NULL
GROUP BY t.file_type, t.ColumnA) r
GROUP BY r.File_type;

私はまったく使用しませんでしColumnBColumnC

このタスクのSQLフィドルは次のとおりです。縮小されたデータサンプルを使用しました。別のデータで試してみることをお勧めします。

于 2013-03-09T01:29:03.873 に答える
0

これを行う1つの方法は、カーソルを使用することです。レコードをループして、必要に応じて変数をインクリメントできます。これはもう試しましたか?

于 2013-03-09T04:55:42.273 に答える
0

これを試して

with CTE as
(
    select A.columnA, columnc,
    row_number() over (partition by columnA order by columnc desc) rnk
    from T  A  
), cte2 as
(
    SELECT distinct columna, file_type from t where file_type is not null
), cte3 as
(
     select distinct columnd, file_type from t 
     where file_type is not null and columnd is not null
)
select a.file_type, a.columnd, 
count(case when columnc = 'Y' then 1 end) Success_cnt,
count(case when columnc = 'N' then 1 end) fail_cnt
from cte3 a 
inner join cte2 b on a.file_type = b.file_type
inner join
(select * from cte where rnk = 1) c on b.columnA = c.columnA
group by a.file_type, a.columnd

SQLデモ

于 2013-03-08T23:04:48.373 に答える
0

columnA出力を無視するか、派生テーブルとして外部選択でこれを実行することができます。

SELECT
   ColumnA,
   File_type,
   CountIf(Max(ColumnC),'Y') as "Success_cnt",
   CountIf(Max(ColumnC),'N') as "Fail_cnt"
FROM
   table
Group By
   ColumnA,
   File_type
于 2013-03-08T23:10:01.063 に答える