2017-06-26 5 views
1

私は、セクションにサインインされた人数または毎日セクションからサインアウトされた人の数をカウントするレポートを作成しようとしています。MSSQL実行INカウントレコード

select inout.name_id, nametable.name, inout.datetime, inout.status, inout.section 
from inout 
join nametable on inout.name_id = nametable.name_id 
where inout.date between '1/1/2016' and '1/3/2016' 
order by inout.date 

サンプルデータ:

Datetime   Name Section Status 
1/1/2016 1:34:56 John A  IN 
1/1/2016 4:11:11 Steve A  OUT 
1/1/2016 18:20:20 Bill A  IN 
1/2/2016 13:13:13 John A  OUT 
1/2/2016 12:12:12 Ben A  IN 
1/3/2016 1:01:01 JIM A  IN 

そして、最終的な結果:

Date  # of people in section 

1/1/2016   2 
1/2/2016   2 
1/3/2016   3 

EDIT:-1を与えるだろうランニングカウントとOUTに+1を与える状態で考えていたので、ある人が仕事にやって来るか、仕事を辞めた場合、毎日特定のセクションで何人の人が働いているかを見ることができますが、その日付範囲の前にそこにいた人々のためにどのように表示するかはわかりません。

+0

+1と-1が分かりませんでした。もっと明確に説明できますか? – Siva

+0

私はその人がINステータスを持っていればカウントに+1を加算し、アウトステータスの場合は-1と考えていました。そのような日付の各セクションには何人の人がいるのかを数えます。 – mol

答えて

0

これが答えではありませんが、視覚化するために他人を助けることとあなたを刺激する(しかし、私はあなたがそれをしようとしたと思う):

  1. あなたが投稿したクエリを使用してください。
  2. Crystalデザイナーで、列「Datetime」でグループを作成します。
  3. 式を作成します。if {inout.status} = "IN" then 1 else -1。名前が@Quantifierだとしましょう。
  4. 集計するフィールドを作成します。集計するフィールド= @Quantifier、要約のタイプ=合計、各レコードの評価、リセットなし。 #NumberOfPeopleInSection_CloseButNoCigarとしましょう。
  5. 実行中の合計フィールドをグループフッターに配置します。前回の「スティーブ」のないこの「スティーブ・アウト」があるので

結果は、あなたが期待言ったように、あなたが望むものではありません、本当に。だから、まだまだトリックが必要です。

enter image description here

溶液中でそれを有効にするには、あなたが最初のカウントを取得するために別のクエリをしようとします。何かを試してみてください:

select sum(case when status='IN' then 1 else -1 end) 
from inout 
join nametable on inout.name_id = nametable.name_id 
where inout.datetime < '2016-1-1' 

最終結果では、この初期値を考慮してください。

+0

ラベル "INvsOUT"の最後の列は、式@Quantifierです – heringer

関連する問題