2

このクエリは正常に機能しますが、冗長に見えます (おそらく私が間違っている可能性があります)。これを行うためのより良い方法はありますか?(すべての行の合計で4列すべてが必要です)

 select parz.*, (parz.sessioniSvolte + parz.sessioniPianificate ) as sessioniTotale
 from (
    select 
      e.Prefettura AS Prefettura, 
      count(case when  s.Giorno<getDate() then    s.idSessione else null end) AS sessioniSvolte,
      count(case when  s.Giorno>=getDate() then    s.idSessione else null end) AS sessioniPianificate
        from SESSIONE_FORMAZIONECIVICA s
        inner join SEDE_SESSIONECIVICA e ON e.idSede = s.idSede

        GROUP BY e.Prefettura
) as parz

同様の質問を見つけましたが、それらは私の問題と一致しませんでした。

4

1 に答える 1

3

単純な を追加することで、サブクエリなしでクエリを書き直すことができますcount(*)

select 
  e.Prefettura AS Prefettura, 
  count(case when s.Giorno<getDate() then s.idSessione end) AS sessioniSvolte,
  count(case when s.Giorno>=getDate() then s.idSessione end) AS sessioniPianificate,
  count(*) as sessioniTotale
from SESSIONE_FORMAZIONECIVICA s
join SEDE_SESSIONECIVICA e ON e.idSede = s.idSede
GROUP BY e.Prefettura

else nullnull は、一致がない場合のデフォルトの結果であるため、冗長を削除しました。

于 2013-10-22T09:30:27.603 に答える