1

私がテーブルを持っているとしましょうTableA

parent_id int
this_id int
filter int
this_date date

そしていくつかのサンプルデータ:

parent_id = 1, this_id = 1, filter = 1, this_date = ...
parent_id = 1, this_id = 2, filter = 0, this_date = ...
parent_id = 1, this_id = 3, filter = 1, this_date = ...
parent_id = 4, this_id = 4, filter = 0, this_date = ...
parent_id = 4, this_id = 5, filter = 0, this_date = ...
parent_id = 4, this_id = 6, filter = 1, this_date = ...
parent_id = null, this_id = 7, filter = 0, this_date = ...
parent_id = null, this_id = 8, filter = 1, this_date = ...

parent_idは常に子の1つと同じですthis_id。子がない場合parent_idはnull

テーブルは変更できません、それが私たちが持っているものです。

要約を表示するビューを作成しました。

SELECT ISNULL(parent_id,this_id) id, COUNT(*) numparts, MAX(this_date)...
FROM TableA
GROUP BY ISNULL(parent_id,this_id)

サマリービューに、を含むパーツの数を追加したいと思いますfilter=1

したがって、この例の結果は(私が実行した場合SELECT * FROM theview)次のようになります。

id  numparts dt    numOfFilter1
1      3     ...        2
4      3     ...        1
7      1     ...        0
8      1     ...        1

実際には、私のフィルター列はサブクエリになりますが、このビットを並べ替えると、そのビットを理解できると思います。

4

1 に答える 1

1

このようにしてみてください:

SELECT  ISNULL(parent_id,this_id) id, 
        COUNT(*) numparts, 
        MAX(this_date), 
        SUM(CASE WHEN filter = 1 THEN 1 ELSE 0 END) numOfFilter1
FROM    TableA
GROUP BY 
        ISNULL(parent_id,this_id)
于 2012-12-07T10:35:28.267 に答える