LoginSignup
rect8530
@rect8530

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

答えが2以上存在するときに「複数」と返すSQL文を書きたい

解決したいこと

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

0

3Answer

SQL 文の文法は DB によって異なることを認識してください。なので、SQL 文の質問をするなら DB が何か(SQL Server? MySQL? PostgreSQL? Oracle? その他?)を書くようにしましょう。質問欄を編集して追記してください。

1Like

「借方左側項目」が存在して、値は「材料費」など。「借方右側項目」も存在して、値は「未払金」とか。また金額項目も存在する。この推測で以下の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 借方右側項目

0Like

会計はよくわからないので、列名などおかしかったらすみません。

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 になるはず
0Like

Your answer might help someone💌