Untitled

mail@pastecode.io avatar
unknown
plain_text
8 months ago
2.2 kB
1
Indexable
Never
-- Определение плотности для разных типов топлива
WITH Density AS (
    SELECT
        'АИ-92' AS fuel, 760 AS density
    UNION ALL SELECT 'АИ-95', 750
    UNION ALL SELECT 'АИ-98', 780
    UNION ALL SELECT 'ДТ', 840
    UNION ALL SELECT 'АИ-100', 750
    UNION ALL SELECT 'G-Drive', 750 -- Предполагаемая плотность для всех G-Drive как для АИ
)

-- Отфильтрованные транзакции с расчетом тонн
, FilteredTransactions AS (
    SELECT
        vt.client_inn,
        vt.agent_inn,
        vt.contract_name,
        vt.region,
        DATEFROMPARTS(YEAR(vt.datetime_trn), MONTH(vt.datetime_trn), 1) AS transaction_date,
        vt.nomenclature,
        SUM(cast(vt.litres AS decimal(10,2))) AS monthly_litres,
        MAX(vt.datetime_trn) AS MAX_DOC_date
    FROM [DATAMARTS].[dpa].vw_transactions vt
    WHERE vt.nomenclature IN (
        'АИ-100 Плюс', 'Аи-98', 'Автомобильный бензин экологического класса К5 марки АИ-92-К5', 'Топливо дизельное межсезонное',
        -- Продолжение списка номенклатур ...
        'ДТ', 'G-95', 'АИ-92 ОПТИ'
        -- Убедитесь, что весь список номенклатур включен здесь
    )
    GROUP BY 
        vt.client_inn,
        vt.agent_inn,
        vt.contract_name,
        vt.region,
        vt.nomenclature,
        YEAR(vt.datetime_trn),
        MONTH(vt.datetime_trn)
)

-- Присоединяем плотности и пересчитываем литры в тонны
, TransactionsWithTons AS (
    SELECT
        ft.*,
        d.density,
        (ft.monthly_litres * d.density) / 1000 AS monthly_tons -- Расчет тонн
    FROM FilteredTransactions ft
    LEFT JOIN Density d ON ft.nomenclature LIKE '%' + d.fuel + '%'
)

-- Далее ваш код для создания #vttr, #dll и т.д., используя TransactionsWithTons вместо #vtt
-- Замените #vtt на TransactionsWithTons в последующих запросах
Leave a Comment