0

このクエリがあり、= 0 の結果を削除したいと考えています。

declare @Teacher as nvarchar(50) ='Professor David'

select  'Science Class' as 'Study Type',
(select Count(Distinct StudentID) from Table_class_SClass where Grade = 'Passed' and Teacher= @Teacher) as 'Number of Passing Students'
union
select  'Science Lab' as 'Study Type',
(select Count(Distinct StudentID) from Table_class_SLab where Grade = 'Passed' and Teacher= @Teacher) as 'Number of Passing Students'
union
select  'Science Field' as 'Study Type',
(select Count(Distinct StudentID) from Table_class_field where Grade = 'Passed' and Teacher= @Teacher) as 'Number of Passing Students'

これをストアプロシージャとして保存したいのですが、教師が「デビッド教授」と宣言していないユニオンの結果を排除したいと考えています。

表示される結果は次のとおりです。

Study Type        Number Of passing Students
Science Class     8
Science Lab       0
Science Field     1

必要な結果は次のとおりです。

Study Type        Number Of passing Students
Science Class     8
Science Field     1

ご覧のとおり、合格者数が 0 であるため、Science Lab を削除したいと考えています。

4

4 に答える 4

0

各クエリの最後にこの行を追加してみてください

group by teacher having count(Distinct StudentID) > 0

これにより、カウントが 1 を超えるレコードのみが返されます

select  'Science Class' as [Study Type],
          (select Count(Distinct StudentID) from Table_class_SClass where Grade = 'Passed' and Teacher= @Teacher group by teacher having count(Distinct StudentID) > 0) as [Number of Passing Students]
union all
select  'Science Lab' as 'Study Type',
          (select Count(Distinct StudentID) from Table_class_SLab where Grade = 'Passed' and Teacher= @Teacher group by teacher having count(Distinct StudentID) > 0) as [Number of Passing Students]
union all
select  'Science Field' as 'Study Type',
          (select Count(Distinct StudentID) from Table_class_field where Grade = 'Passed' and Teacher= @Teacher group by teacher having count(Distinct StudentID) > 0) as [Number of Passing Students]
于 2013-09-19T12:11:57.723 に答える
0

派生テーブルとして作成し、0 行を超える行を除外します。

 declare @Teacher as nvarchar(50) ='Professor David'

    select * from 
(    
        select  'Science Class' as 'Study Type',
        (select Count(Distinct StudentID) from Table_class_SClass where Grade = 'Passed' and Teacher= @Teacher) as 'Number of Passing Students'
        union
        select  'Science Lab' as 'Study Type',
        (select Count(Distinct StudentID) from Table_class_SLab where Grade = 'Passed' and Teacher= @Teacher) as 'Number of Passing Students'
        union
        select  'Science Field' as 'Study Type',
        (select Count(Distinct StudentID) from Table_class_field where Grade = 'Passed' and Teacher= @Teacher) as 'Number of Passing Students'
) 
as DT
Where DT.cnt > 0
于 2013-09-19T12:16:00.387 に答える
0

既存のクエリをサブクエリにすることができます。次に、where句を使用してフィルタリングを行うことができます。

select t.*
from (select  'Science Class' as [Study Type],
              (select Count(Distinct StudentID) from Table_class_SClass where Grade = 'Passed' and Teacher= @Teacher) as [Number of Passing Students]
      union all
      select  'Science Lab' as 'Study Type',
              (select Count(Distinct StudentID) from Table_class_SLab where Grade = 'Passed' and Teacher= @Teacher) as [Number of Passing Students]
      union all
      select  'Science Field' as 'Study Type',
              (select Count(Distinct StudentID) from Table_class_field where Grade = 'Passed' and Teacher= @Teacher) as [Number of Passing Students]
     ) t
where [Number of Passing Students] > 0;

も に変更しunionましたunion all重複を削除しないunion allため、より効率的です。そのため、デフォルトでそれを使用することをお勧めします (重複を削除したくない場合)。また、列のエイリアスを一重引用符ではなく角括弧を使用するように変更しました。単一引用符は文字列定数にのみ使用し、クエリ内の列の名前には使用しないでください。

于 2013-09-19T12:11:55.303 に答える