2017-05-25 9 views
0

私はデータベースに保存されているテーブルとフィールドを選択してカスタムレポートを作成できるレポートジェネレータを作成しています。各テーブル、フィールド、計算値などは、別のエンティティとして扱われ、他のエンティティには直接接続されません。彼らはすべて自己完結型です。IF検索条件を "true"値として使用する方法

私は現在、次のようなコードを使用して、作業しているカウントフィールド/列の数があります

sum(case when usasf_teams.division_levelid=7 then 1 else 0 end) as Dance 

私の問題は、これらの列のかなりの数があるということです、とのほとんどを値はゼロです。これにより、ゼロ以外の値を見つけにくくなります。これは、われわれが見たいものです。

IFステートメントを使用して数値またはスペースを返すことができますが、すべての行のすべての列に対して同じ操作を2回実行することでサーバーを置く必要はありません。私はこのようなことをしたい:

このようにして、フィールドごとに合計/大文字小文字の操作が1回だけ行われます。

これは可能ですか?

+1

あなたの質問は不明です。通常、集計を制限する場合は、行数を制限する 'WHERE'節を使用します。より良い結果を得るためにサンプルデータを投稿してください。 –

+0

私は行の数を制限しようとしていません。上記のように、私は_columns_からゼロを削除しようとしています。フィールド "division_levelid"は常にゼロではなく、1から9までの数字(またはそれ以上)です。 –

答えて

1

まず、あなたがあなたのロジックを簡素化することができます。そして、

sum(usasf_teams.division_levelid = 7) as Dance 

、私はNULLではなく、空間に0値を変更することをお勧めします:

nullif(sum(usasf_teams.division_levelid = 7), 0) as Dance 

あなたが返すようにしようとしている場合実空間では、型に注意する必要があります。あなたはこれを行うことができます。

select (case when sum(usasf_teams.division_levelid = 7) > 0 
      then cast(sum(usasf_teams.division_levelid = 7) as char) 
      else ' ' 
     end) 

sum()を2回行うことを心配する必要はありません。集約における費用は、集計関数自体を(一般的に)計算するのではなく、データを操作することです。

+0

IFNULLでないと思ったのはNULLIF – hiule

+0

@hiuleです。 。 。関数は同じではありません:https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull。 'IFNULL()'を忘れるだけです。 'COALESCE()'を使ってください。 –

+0

これは完璧に動作します、ありがとう。私はスペースが必要かもしれないと思ったが、明らかに私はそうではない。 パラメータAがパラメータB(これは私がゼロ以外の何かであると推測される)と一致する場合、NULLIFはNULLを返し、それ以外の場合はパラメータAを返します。私はそれを他の用途に使うことができると確信しています。 –

関連する問題