【問題1】商品一覧

SELECT
    ITEM_POPULAR_RANK AS RANK
    , ITEM_CODE AS CODE
    , ITEM_NAME AS NAME 
FROM
    ITEM 
WHERE
    -- 販売中の商品が対象
    SALE_END_DATE IS NULL 
ORDER BY
    ITEM_POPULAR_RANK ASC
    , ITEM_CODE ASC;

【問題2】SDGs推進割合

SELECT
    SD.PF_CODE AS CODE
    , PF.PF_NAME AS NAME
    -- 小数点第3位で四捨五入
    , ROUND( 
        ( 
            -- REAL型に変換して、小数点の計算を有効にする
            CAST(SD.PROMOTE_MUNICIPALITY AS REAL) / SD.MUNICIPALITY_TTL * 100
        ) 
        , 2
    ) AS RATIO 
FROM
    SDGS AS SD 
    INNER JOIN PREFECTURE AS PF 
        ON PF.PF_CODE = SD.PF_CODE 
WHERE
    SD.SURVEY_YEAR = 2022 
ORDER BY
    RATIO DESC
    , SD.PF_CODE ASC;

【問題3】組織変更

-- 記述された順番にSQL文が実行される
-- 処理1
INSERT 
INTO DEPARTMENT 
-- 部門コード’A100’のデータをSELECTして各項目にセット
SELECT
    'B300'
    , '2023-04-01'
    , NULL
    , '新設部門'
    , DP1.LAYER
    , DP1.UP_DEPT_CODE
    , '1'
    , DP1.UPDATE_USER_NAME
    , '2023-04-01 00:00:00' 
FROM
    DEPARTMENT AS DP1 
WHERE
    DP1.DEPT_CODE = 'A100';

-- 処理2
UPDATE DEPARTMENT 
SET
    END_DATE = '2023-03-31'
    , VALID_FLG = '0'
    , UPDATE_USER_NAME = 'ORG_CHG'
    , USER_UPDATE_DATETIME = '2023-03-31 23:59:59' 
WHERE
    -- IN句で部門コードを指定
    DEPT_CODE IN ('A100', 'A200');

-- 処理3
UPDATE EMP 
SET
    DEPT_CODE = 'B300'
    , START_DATE = '2023-04-01'
    , UPDATE_USER_NAME = 'ORG_CHG'
    , USER_UPDATE_DATETIME = '2023-04-01 00:00:00' 
WHERE
    -- IN句で部門コードを指定
    DEPT_CODE IN ('A100', 'A200') 
    -- 有効なデータのみ対象
    AND VALID_FLG = '1';

【問題4】位置情報

SELECT 
    D.DISTRICT_CODE CODE,
    D.DISTRICT_NAME NAME,
    T.LATITUDE LAT,
    T.LONGITUDE LON
FROM DISTRICT AS D
INNER JOIN LOCATION_TBL AS T
    ON D.DISTRICT_CODE = T.DISTRICT_CODE
    -- 地区コード '1101'を表示しない
    AND D.DISTRICT_CODE != '1101'
-- 各レコードと計算するため、'1101'の緯度、経度を交差結合で取得
CROSS JOIN LOCATION_TBL AS LT
    ON LT.DISTRICT_CODE = '1101'
ORDER BY
    -- 直角三角形の斜辺の長さを求める三平方の定理を利用して長さを求める
    (POW(LT.LATITUDE - T.LATITUDE, 2) + POW(LT.LONGITUDE - T.LONGITUDE, 2)) DESC
    , D.DISTRICT_CODE ASC;