質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

1507閲覧

SQL クロス集計の条件を絞り込む

LATE

総合スコア13

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/04/18 03:46

###前提・実現したいこと
言語は、SQLを使用しています。
金額年計が0以下を表示させないようにしたいです。

【結果】
UserCd 金額年計

3908000 24690912
1072500 7528690
1057000 6136700
1915000 5344700
1019414 5259370
3855001 4601556
1057046 0
1032850 0
1032927 0
1680059 0
1340066 -850

【理想】
UserCd 金額年計

3908000 24690912
1072500 7528690
1057000 6136700
1915000 5344700
1019414 5259370
3855001 4601556

###該当のソースコード
SELECT
U.UserCd
,SUM(CASE
WHEN SupDate BETWEEN '20140101' AND '20141231' THEN TotalAmnt
ELSE 0
END
) AS 金額年計
FROM
V_SalesH AS H
LEFT JOIN
M_User AS U
ON H.UserCd = U.UserCd

GROUP BY
U.UserCd
,U.UserNm
HAVING
SUM(TotalAmnt) > 0
ORDER BY
金額年計 DESC
;
###試したこと
HAVINGで条件を指定しても0以下が表示されてしまいます。

###補足情報(言語/FW/ツール等のバージョンなど)
【ツール】 microsoft sql server management studio

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

SQL SERVERの仕様はよくわからないのですが

HAVING 金額年計 > 0

ではダメなんでしょうか?

ちなみにものにもよりますが、集計のところは

SUM( (SupDate BETWEEN '20140101' AND '20141231')*TotalAmnt ) AS 金額年計

にような書き方ができるものもあります

投稿2017/04/18 03:57

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LATE

2017/04/18 04:02

回答ありがとうございます! HAVING 金額年計 > 0  と入力すると 「列名 '金額年計' が無効です。」 というエラーメッセージが出てしまいます。 集計の他の例ありがとうございます! 勉強になりました。
yambejp

2017/04/18 04:04

なるほどSQL SERVERだとダメな書式なんですね (MySQLだと大丈夫なんで)
SVC34

2017/04/18 07:04 編集

この書き方はSQL標準にはなく、MySQL (MariaDB) 以外のRDBMSでは通常サポートされていません。PostgreSQLでもGROUP BYとORDER BYにはSELECT句でつけた別名を指定可能ですが、HAVING句には指定出来ないようです。冗長な記述は面倒なので、他のRDBMSも取り入れて欲しいとは思っているのですが。
guest

0

ベストアンサー

HAVING句のSUM関数にも同じCASE式を用いる必要があるのではないでしょうか

sql

1,SUM(CASE 2 WHEN SupDate BETWEEN '20140101' AND '20141231' THEN TotalAmnt 3 ELSE 0 4 END 5 ) AS 金額年計

sql

1HAVING 2 SUM(TotalAmnt) > 0

投稿2017/04/18 03:54

SVC34

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LATE

2017/04/18 04:00

回答ありがとうございます! HAVING句に同じCASE式を入れてみたところ自分が求めていた値が出ました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問