#6 DECODE CASE
2669 ワード
2021.12.21 🔆きれいに跳び越す
序曲
今日はSELECTにWHERE以外の条件を追加できる条件文DECODEとCASEについて学びました.
DECODE同等(=)条件で使用する関数 構文 DECODE(A、B、True、False):A=BはTrue A≠BはFalse を表す DECODE(A, B, B_true, C, C_true , false) :
--A=Bの場合、B true
--A=Cの場合、C true
--A≠B,A≠Cの場合false DECODE(A, B, DECODE(A2, B2, B2_true), B_false)
--A=B,A2=B2,B2 true
--A=B,A2≠B2,null
--A≠Bの場合、B false CASE複数の条件(<、>、>=、<=、=)を扱う関数 構文 CASE変数
WHEN値1 THEN結果1:変数=値1であれば結果1
WHEN値2 THEN結果2:変数≠値1;変数=値2なら結果2
ELSE結果3:以上のすべての値を満たすことができなければ結果3
END; CASE
WHEN条件式1 THEN結果1:条件式1が真であれば結果1
WHEN条件式2 THEN結果2:条件式1は偽、条件式2は真の結果2
ELSE結果3:以上のすべての条件式を満たすことができなければ結果3
END; DECODE,CASE例
1.タイトルは「サッカー」「野球」「バスケットボール」「ゴルフ」に関する本は「球技種目」、フィギュアスケートに関する本は「スケート」、ウエイトリフティングに関する本は「体操」、その他すべての本は「スポーツ」が出力する「種目」欄で、本号、本名、出版社、種目を印刷する
SELECT bookid, bookname, publisher,
CASE
WHEN(bookname LIKE'%サッカー')
OR bookname LIKE'%野球%'
OR bookname LIKE'%バスケットボール%'
OR bookname LIKE「%ゴルフ%」)THEN「球技種目」
WHEN bookname LIKE'%フィギュアスケート%'THENスケート'
WHEN bookname LIKE'%重量挙げ%'THEN体操'
MELSE「その他」
END「プロジェクト」
FROM book;
2.すべての本の平均値以上の本は「平均値以上」、「空未満」の「平均値」欄を作成し、書名、価格、平均値を出力する
SELECT bookname, price,
CASE
WHEN price>=(SELECT AVG(price)FROM book)THEN「均価以上」
ELSE null
END「均価」
FROM book;
3、本の価格が10000元以下の本は、1000元を高める;超えた本は、価格が変わらず、書名、価格、変動価格で出力する
SELECT bookname, price,
CASE
WHEN price <= 10000 THEN price+1000
ELSE price
END「可変価格」
FROM book;
4.電話番号のあるお客様、「専用」のないお客様は、お客様のすべての情報を入力して出力する必要があります.
SELECT c.*,
DECODE(phone、null、「入力が必要」、「非公開」)
FROM customer c;
5.注文明細に割引がある本には「割引」、価格が変わらない本には「変わらない」印刷欄、印刷書名、出版社、価格、販売価格、割引明細
SELECT bookname ,publisher, price, saleprice,
CASE
WHEN(price-saleprice)>0 THEN「割引」
WHEN(price-saleprice)=0 THEN「不変」
MELSE「その他」
END
FROM book b, orders o
WHERE b.bookid = o.bookid;
6.購入履歴のあるお客様にクーポンを提供し、購入履歴のないお客様には提供しない「クーポン」欄を作成し、「提供」「未提供」をお客様名、クーポン欄として出力する
SELECT a.name、「クーポン」
FROM
(SELECT c.name,
CASE
WHEN o.orderid is null THEN「未提供」
MELSE「交付」
END「クーポン」
FROM orders o, customer c
WHERE o.custid(+) = c.custid) a
GROUP BY a.name、「クーポン」;
7.注文が3回以上のお客様は「ベストメンバー」、2回は「優秀メンバー」、1回は「一般メンバー」、0回は「潜在顧客」の「会員資格」欄を作成し、氏名を印刷する
SELECT c.custid, c.name,
CASE
WHEN count()>=3 THEN「ベストメンバー」
WHEN count()=2 THEN「優秀会員」
WHEN count(*) = 1 THEN (CASE
WHEN MAX(o.orderid)は空THEN「潜在顧客」
MELSE「一般メンバー」
END)
ENDメンバーシップ
FROM orders o, customer c
WHERE o.custid(+) = c.custid
GROUP BY c.custid, c.name;
序曲
今日はSELECTにWHERE以外の条件を追加できる条件文DECODEとCASEについて学びました.
DECODE
--A=Bの場合、B true
--A=Cの場合、C true
--A≠B,A≠Cの場合false
--A=B,A2=B2,B2 true
--A=B,A2≠B2,null
--A≠Bの場合、B false
WHEN値1 THEN結果1:変数=値1であれば結果1
WHEN値2 THEN結果2:変数≠値1;変数=値2なら結果2
ELSE結果3:以上のすべての値を満たすことができなければ結果3
END;
WHEN条件式1 THEN結果1:条件式1が真であれば結果1
WHEN条件式2 THEN結果2:条件式1は偽、条件式2は真の結果2
ELSE結果3:以上のすべての条件式を満たすことができなければ結果3
END;
1.タイトルは「サッカー」「野球」「バスケットボール」「ゴルフ」に関する本は「球技種目」、フィギュアスケートに関する本は「スケート」、ウエイトリフティングに関する本は「体操」、その他すべての本は「スポーツ」が出力する「種目」欄で、本号、本名、出版社、種目を印刷する
SELECT bookid, bookname, publisher,
CASE
WHEN(bookname LIKE'%サッカー')
OR bookname LIKE'%野球%'
OR bookname LIKE'%バスケットボール%'
OR bookname LIKE「%ゴルフ%」)THEN「球技種目」
WHEN bookname LIKE'%フィギュアスケート%'THENスケート'
WHEN bookname LIKE'%重量挙げ%'THEN体操'
MELSE「その他」
END「プロジェクト」
FROM book;
2.すべての本の平均値以上の本は「平均値以上」、「空未満」の「平均値」欄を作成し、書名、価格、平均値を出力する
SELECT bookname, price,
CASE
WHEN price>=(SELECT AVG(price)FROM book)THEN「均価以上」
ELSE null
END「均価」
FROM book;
3、本の価格が10000元以下の本は、1000元を高める;超えた本は、価格が変わらず、書名、価格、変動価格で出力する
SELECT bookname, price,
CASE
WHEN price <= 10000 THEN price+1000
ELSE price
END「可変価格」
FROM book;
4.電話番号のあるお客様、「専用」のないお客様は、お客様のすべての情報を入力して出力する必要があります.
SELECT c.*,
DECODE(phone、null、「入力が必要」、「非公開」)
FROM customer c;
5.注文明細に割引がある本には「割引」、価格が変わらない本には「変わらない」印刷欄、印刷書名、出版社、価格、販売価格、割引明細
SELECT bookname ,publisher, price, saleprice,
CASE
WHEN(price-saleprice)>0 THEN「割引」
WHEN(price-saleprice)=0 THEN「不変」
MELSE「その他」
END
FROM book b, orders o
WHERE b.bookid = o.bookid;
6.購入履歴のあるお客様にクーポンを提供し、購入履歴のないお客様には提供しない「クーポン」欄を作成し、「提供」「未提供」をお客様名、クーポン欄として出力する
SELECT a.name、「クーポン」
FROM
(SELECT c.name,
CASE
WHEN o.orderid is null THEN「未提供」
MELSE「交付」
END「クーポン」
FROM orders o, customer c
WHERE o.custid(+) = c.custid) a
GROUP BY a.name、「クーポン」;
7.注文が3回以上のお客様は「ベストメンバー」、2回は「優秀メンバー」、1回は「一般メンバー」、0回は「潜在顧客」の「会員資格」欄を作成し、氏名を印刷する
SELECT c.custid, c.name,
CASE
WHEN count()>=3 THEN「ベストメンバー」
WHEN count()=2 THEN「優秀会員」
WHEN count(*) = 1 THEN (CASE
WHEN MAX(o.orderid)は空THEN「潜在顧客」
MELSE「一般メンバー」
END)
ENDメンバーシップ
FROM orders o, customer c
WHERE o.custid(+) = c.custid
GROUP BY c.custid, c.name;
Reference
この問題について(#6 DECODE CASE), 我々は、より多くの情報をここで見つけました https://velog.io/@yum7134/6-DECODE-CASEテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol