【sql_24_045】販売終了

UPDATE GOODS 
SET
    SALE_END_DATE = '2024-07-31' 
WHERE
    VALID_FLG = '0' 

    -- NULLの判断は、「IS NULL」を使用します。
    AND SALE_END_DATE IS NULL;


【sql_24_046】品数カウント

SELECT
    ORDER_NO AS OD_NO
    , SLIP_COMMENT AS COMMENT

    -- 全体の備考の文字数から、カンマを空文字にした文字数をマイナスして1を加算する。
    -- 例)「001,002」と入力されていた場合 1 + 7 - 6 = 2
    , 1 + LENGTH(SLIP_COMMENT) - LENGTH(REPLACE (SLIP_COMMENT, ',', '')) AS CNT 
FROM
    ORDERS 
ORDER BY
    CNT DESC
    , OD_NO DESC;


【sql_24_047】データ整理

-- 受注データ明細を先に削除する。
DELETE 
FROM
    ORDERS_DTL 
WHERE

    -- 受注データを受注日で絞り込み、該当する受注番号と一致する受注データ明細を削除する。
    ORDER_NO IN ( 
        SELECT
            ORDER_NO 
        FROM
            ORDERS 
        WHERE
            ORDER_DATE BETWEEN '2010-01-01' AND '2010-12-31'
    ); 

-- 受注データ明細を削除後に、同じ受注日の条件で受注データを削除する。
DELETE 
FROM
    ORDERS 
WHERE
    ORDER_DATE BETWEEN '2010-01-01' AND '2010-12-31';


【sql_24_054】原価更新

UPDATE SKU 
SET
    STD_COST_PRICE = SUB.STD_COST_PRICE
    , UPDATE_USER_NAME = 'MODIFY'
    , USER_UPDATE_DATETIME = '2024-08-31 00:00:00' 
FROM

    -- 副問合せで、商品コード毎の標準原価の平均を算出する。
    ( 
        SELECT
            SK1.GOODS_CODE
            , GD.STD_COST_PRICE

            -- 平均した値をROUNDで四捨五入する。(小数第1位を四捨五入なのでパラメータの指定はなし)
            , ROUND(AVG(SK1.STD_COST_PRICE)) AS SCP 
        FROM
            SKU AS SK1 

            -- 標準原価を取得するために、品目データを内部結合する。
            INNER JOIN GOODS AS GD 
                ON GD.GOODS_CODE = SK1.GOODS_CODE 

        -- 商品コード、標準原価でグルーピングする。
        GROUP BY
            SK1.GOODS_CODE
            , GD.STD_COST_PRICE
    ) AS SUB 
WHERE
    SUB.GOODS_CODE = SKU.GOODS_CODE 

    -- 副問合せで求めた平均値と比較する。
    AND SKU.STD_COST_PRICE < SUB.SCP;

-- WHERE句で副問合せを使用して標準原価の平均値を求めて比較しようとすると
-- TLEになる場合があるので注意してください。