SQL 文の文法は DB によって異なることを認識してください。なので、SQL 文の質問をするなら DB が何か(SQL Server? MySQL? PostgreSQL? Oracle? その他?)を書くようにしましょう。質問欄を編集して追記してください。
1Like
SQL初心者です。
答えが2以上存在するときに「複数」と返すSQL文を書きたいです。
例)
材料費 5,000/未払金 5,440円
振込手数料440/
という取引があったときに、
未払金側から見て左側は複数あるので、表示を
「複数 /未払金 5,440円」と出力したい。
この時、SQLでは
CASE式を使うと思うのですが、
「相手側が2以上あったとき」という条件のSQLの書き方がわかりません。
COUNT(*)>2でよいでしょうか?その場合、CASE式にCOUNT文を組み込む書き方がわかりません。
また、副問合せにする必要がある場合は、その考え方も
わかる方、教えていただけないでしょうか?
条件は次の通りです。
テーブル名:元帳
言語:ORACLE SQR
SELECT *
FROM 元帳
・・・
/相手側が2以上あったとき/
CASE (元帳の借方(左側)の項目)
WHEN 元帳の借方(左側)の項目が2以上の時
THEN '複数'
ELSE 元帳の借方(左側)の項目名
END
SQL 文の文法は DB によって異なることを認識してください。なので、SQL 文の質問をするなら DB が何か(SQL Server? MySQL? PostgreSQL? Oracle? その他?)を書くようにしましょう。質問欄を編集して追記してください。
「借方左側項目」が存在して、値は「材料費」など。「借方右側項目」も存在して、値は「未払金」とか。また金額項目も存在する。この推測で以下のSQLを書いてみます。
select
case when 件数=1 then 借方左側項目1件目
else '複数' end as 借方左側表示,
小計金額,
借方右側項目
from
( select
first(借方左側項目) as 借方左側項目1件目,
借方右側項目,
count(*) as 件数,
sum(金額) as 小計金額
from 元帳
group by
借方右側項目
) temp
order by 借方右側項目
会計はよくわからないので、列名などおかしかったらすみません。
WITH sampleTable AS (
SELECT
*
FROM
(VALUES
('A','材料費', 5000)
,('A','振込手数料', 440)
,('B','材料費', 1000)
,('B','材料費', 3000)
) AS 元帳 (取引先, 借方, 金額)
)
SELECT
取引先
,CASE
WHEN COUNT(DISTINCT 借方) = 1 THEN MIN(借方)
ELSE '複数'
END AS 借方
,SUM(金額) AS 合計金額
FROM
sampleTable
GROUP BY
取引先
-- 取引先Aは複数 5440, 取引先Bは材料費 4000 になるはず