【問題1】商品一覧

SELECT
    ITEM_POPULAR_RANK AS RANK
    , ITEM_CODE AS CODE
    , ITEM_NAME AS NAME
    , RECOMMEND_ITEM_RANK AS RCM_RANK 
FROM
    ITEM 
ORDER BY
    ITEM_POPULAR_RANK ASC

    -- 商品コードは降順指定になっているので気を付けましょう
    , ITEM_CODE DESC;

【問題2】顧客名検索

SELECT
    CUST_CODE AS CODE
    , CUST_NAME AS NAME
    , CUST_USER_NAME AS USER_NAME 
FROM
    CUSTOMER 
WHERE

    -- 前方一致検索なので、%は検索文字の後にのみ記述する
    CUST_NAME LIKE '株式会社%' 

    -- 部分一致検索なので、%で検索文字を挟んで記述する
    OR CUST_NAME LIKE '%商事%' 
ORDER BY
    CUST_CODE DESC;

【問題3】出荷状況確認

SELECT
    SA.SALES_DATE AS SAL_DATE
    , SA.SALES_NO AS NO
    , SAD.ITEM_CODE AS ITEM_CODE
    , SAD.SALES_QTY AS SAL_QTY
    , SAD.DELIVERED_QTY AS DEL_QTY

     -- CASE句で売上数量、出荷数量の値で出荷状況をセットする
    , CASE 
        WHEN SAD.DELIVERED_QTY = 0 
            THEN '未出荷' 
        WHEN SAD.SALES_QTY > SAD.DELIVERED_QTY 
            THEN '一部出荷' 
        WHEN SAD.SALES_QTY = SAD.DELIVERED_QTY 
            THEN '出荷済' 
        ELSE NULL 
        END AS SHIP_STS 
FROM
    SALES AS SA 

    -- 売上データ明細を売上番頭で内部結合する
    INNER JOIN SALES_DTL AS SAD 
        ON SAD.SALES_NO = SA.SALES_NO 
WHERE

   -- BETWEEN句で売上日を範囲指定する
    SA.SALES_DATE BETWEEN '2024-04-01' AND '2024-04-10' 
ORDER BY

   -- 売上日は降順指定なので気を付ける
    SA.SALES_DATE DESC
    , SA.SALES_NO ASC
    , SAD.ITEM_CODE ASC;

【問題4】売れ筋商品

SELECT
    ODD.ITEM_CODE AS CODE
    , IT.ITEM_NAME AS NAME

    -- SUM関数で受注数量を集計する
    , SUM(ODD.ORDER_QTY) AS SUM_QTY 
FROM

    -- 倉庫データをメインのテーブルにする
    WAREHOUSE AS WH 

    -- 受注データを倉庫データの倉庫コードで内部結合する
    INNER JOIN ORDERS AS OD 
        ON OD.WH_CODE = WH.WH_CODE 

    -- 受注データ明細を受注データの受注番号で内部結合する
    INNER JOIN ORDERS_DTL AS ODD 
        ON ODD.ORDER_NO = OD.ORDER_NO 

    -- 商品データを受注データ明細の商品コードで外部結合する
    -- 商品データに受注データ明細の商品コードが存在しない場合も表示対象とする
    LEFT OUTER JOIN ITEM AS IT 
        ON IT.ITEM_CODE = ODD.ITEM_CODE 
WHERE

   -- 倉庫データの倉庫名でデータを絞り込む
    WH.WH_NAME = '浦和倉庫' 
GROUP BY

    -- 商品コード、商品名でグルーピングを行う
    ODD.ITEM_CODE
    , IT.ITEM_NAME 
HAVING

    -- グルーピングで集計した受注数量が50以上のデータのみ対象とする
    SUM_QTY >= 50 
ORDER BY
    SUM_QTY DESC
    , CODE DESC;