96 lines
3.3 KiB
Transact-SQL
96 lines
3.3 KiB
Transact-SQL
USE [JSDataMiddlePlatform];
|
|
GO
|
|
|
|
/*
|
|
Unified logical layer (temp-table based, no CREATE VIEW permission required).
|
|
Week window = previous natural week:
|
|
[start_of_last_week, start_of_this_week)
|
|
*/
|
|
|
|
DECLARE @week_start datetime2 = CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()) - 1, 0) AS datetime2);
|
|
DECLARE @week_end datetime2 = CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0) AS datetime2);
|
|
|
|
IF OBJECT_ID('tempdb..#filtered') IS NOT NULL
|
|
DROP TABLE #filtered;
|
|
|
|
SELECT
|
|
a.id,
|
|
NULLIF(a.undefined2, '') AS order_id,
|
|
NULLIF(a.undefined1, '') AS inner_order_id,
|
|
COALESCE(NULLIF(a.undefined8, ''), 'unknown') AS shop_name,
|
|
NULLIF(a.undefined9, '') AS shop_code,
|
|
NULLIF(a.undefined10, '') AS sku_id,
|
|
NULLIF(a.undefined56, '') AS afs_type,
|
|
NULLIF(a.undefined57, '') AS afs_reason,
|
|
NULLIF(a.undefined58, '') AS afs_result,
|
|
ISNULL(NULLIF(a.undefined62, ''), '') AS order_labels,
|
|
TRY_CONVERT(decimal(18, 2), NULLIF(a.undefined47, '')) AS post_ship_apply_amount,
|
|
TRY_CONVERT(decimal(18, 2), NULLIF(a.undefined50, '')) AS post_ship_return_amount,
|
|
TRY_CONVERT(decimal(18, 2), NULLIF(a.undefined52, '')) AS post_ship_refund_amount,
|
|
a.createdAt AS created_at,
|
|
CASE
|
|
WHEN CHARINDEX('-', ISNULL(a.undefined8, '')) > 1
|
|
THEN LEFT(a.undefined8, CHARINDEX('-', a.undefined8) - 1)
|
|
ELSE 'unknown'
|
|
END AS platform_name
|
|
INTO #filtered
|
|
FROM dbo.jst_goods_profit_kpi_items_afs AS a WITH (NOLOCK)
|
|
WHERE a.createdAt >= @week_start
|
|
AND a.createdAt < @week_end
|
|
AND ISNULL(NULLIF(a.undefined2, ''), '') <> ''
|
|
AND ISNULL(NULLIF(a.undefined62, ''), '') NOT LIKE '%配件%'
|
|
AND ISNULL(NULLIF(a.undefined62, ''), '') NOT LIKE '%特殊单%';
|
|
|
|
-- 1) weekly overview
|
|
SELECT
|
|
MIN(created_at) AS data_min_time,
|
|
MAX(created_at) AS data_max_time,
|
|
COUNT(*) AS afs_record_count,
|
|
COUNT(DISTINCT order_id) AS afs_order_count,
|
|
SUM(ISNULL(post_ship_apply_amount, 0)) AS apply_amount,
|
|
SUM(ISNULL(post_ship_return_amount, 0)) AS return_amount,
|
|
SUM(ISNULL(post_ship_refund_amount, 0)) AS refund_amount
|
|
FROM #filtered;
|
|
|
|
-- 2) platform distribution
|
|
SELECT
|
|
platform_name,
|
|
COUNT(*) AS afs_record_count,
|
|
COUNT(DISTINCT order_id) AS afs_order_count,
|
|
SUM(ISNULL(post_ship_refund_amount, 0)) AS refund_amount
|
|
FROM #filtered
|
|
GROUP BY platform_name
|
|
ORDER BY afs_record_count DESC;
|
|
|
|
-- 3) shop top 20
|
|
SELECT TOP (20)
|
|
shop_name,
|
|
platform_name,
|
|
COUNT(*) AS afs_record_count,
|
|
COUNT(DISTINCT order_id) AS afs_order_count,
|
|
SUM(ISNULL(post_ship_refund_amount, 0)) AS refund_amount
|
|
FROM #filtered
|
|
GROUP BY shop_name, platform_name
|
|
ORDER BY afs_record_count DESC;
|
|
|
|
-- 4) reason top 20
|
|
SELECT TOP (20)
|
|
ISNULL(NULLIF(afs_reason, ''), '未标注') AS afs_reason,
|
|
COUNT(*) AS afs_record_count,
|
|
SUM(ISNULL(post_ship_refund_amount, 0)) AS refund_amount,
|
|
SUM(ISNULL(post_ship_return_amount, 0)) AS return_amount
|
|
FROM #filtered
|
|
GROUP BY ISNULL(NULLIF(afs_reason, ''), '未标注')
|
|
ORDER BY afs_record_count DESC;
|
|
|
|
-- 5) type/result matrix
|
|
SELECT
|
|
ISNULL(NULLIF(afs_type, ''), '未标注') AS afs_type,
|
|
ISNULL(NULLIF(afs_result, ''), '未标注') AS afs_result,
|
|
COUNT(*) AS afs_record_count
|
|
FROM #filtered
|
|
GROUP BY
|
|
ISNULL(NULLIF(afs_type, ''), '未标注'),
|
|
ISNULL(NULLIF(afs_result, ''), '未标注')
|
|
ORDER BY afs_record_count DESC;
|