【发布时间】:2017-01-28 20:36:00
【问题描述】:
SQL 查询返回如下所示的表结果:
下面列出了我当前运行的用于生成此表的 SQL:
SELECT DISTINCT
ld.LOAD_ID, lf.ACTUAL_DELIVERY_TS, ld.ORIG_LOC_ID,
fsd.PO_TYPE_CODE, fsf.CASE_QTY,
CASE
WHEN ORIG_LOC_ID IN (6903, 6909, 6912, 7100, 7101, 7183, 7184, 7837, 7840, 7976)
THEN 'Centerpoint'
WHEN ORIG_LOC_ID IN (6061, 6088, 6060, 7042, 7078, 7085, 7086, 7084, 7089, 7093, 7094, 4892, 7628)
THEN 'Imports'
WHEN ORIG_LOC_ID IN (8092, 8098, 9153, 9193, 9195, 9196)
THEN 'Returns'
WHEN ORIG_LOC_ID IN (6005, 6007, 6008, 6014, 6022, 6029, 6041)
THEN 'Fashion'
WHEN ORIG_LOC_ID IN (7006, 7356, 6280, 8240, 8103, 7853, 7005)
THEN 'eCom'
WHEN ORIG_LOC_ID IN (6006, 6009, 6010, 6011, 6012, 6016, 6017, 6018, 6019, 6020, 6021, 6023, 6024, 6025, 6026, 6027, 6030, 6031, 6035, 6036, 6037, 6038, 6039, 6040, 6043, 6048, 6054, 6066, 6068, 6069, 6070, 6080, 6092, 6094, 7026, 7033, 7034, 7035, 7036, 7038, 7039, 7045)
THEN 'Regional'
WHEN ORIG_LOC_ID IN (6042, 6047, 6055, 6056, 6057, 6059, 6062, 6064, 6065, 6071, 6072, 6073, 6074, 6077, 6082, 6083, 6084, 6085, 6090, 6091, 6095, 6096, 6097, 6099, 7010, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7021, 7023, 7024, 7025, 7030, 7047, 7048, 7053, 7055, 7068, 7070, 7077, 7079)
THEN 'Grocery'
WHEN ORIG_LOC_TYPE_CODE IN ('VNDR')
THEN 'VNDR'
WHEN ORIG_LOC_TYPE_CODE IN ('STORE')
THEN 'STORE'
END AS LOADORIG,
CASE
WHEN PO_TYPE_CODE IN (23, 33, 3, 53, 45, 73, 93) THEN 'DA'
WHEN PO_TYPE_CODE IN (20, 22, 28, 29, 40, 42, 50, 83) THEN 'SS'
WHEN PO_TYPE_CODE IN (10, 11, 12, 13, 14, 15, 16, 17, 18, 19) THEN 'Fashion'
WHEN PO_TYPE_CODE IN (43) THEN 'XDOCK'
END AS CHANNEL,
ld.DEST_LOC_ID
FROM
us_trans_dm_vm.LOAD_DIM ld,
us_trans_dm_vm.LOAD_FACT lf,
us_trans_dm_vm.FREIGHT_SHIPMENT_FACT fsf,
us_trans_dm_vm.FREIGHT_SHIPMENT_DIM fsd
WHERE
ld.LOAD_SK_ID = lf.LOAD_SK_ID
AND lf.LOAD_SK_ID = fsf.LOAD_SK_ID
AND fsf.SHIPMENT_SK_ID = fsd.SHIPMENT_SK_ID
AND fsd.CURRENT_IND = 'Y'
AND ld.CURRENT_IND = 'Y'
AND ld.DEST_LOC_ID IN (6006, 6009, 6010, 6011, 6012, 6016, 6017, 6018, 6019, 6020, 6021, 6023, 6024, 6025, 6026, 6027, 6030, 6031, 6035, 6036, 6037, 6038, 6039, 6040, 6043, 6048, 6054, 6066, 6068, 6069, 6070, 6080, 6092, 6094, 7026, 7033, 7034, 7035, 7036, 7038, 7039, 7045)
AND lf.ACTUAL_DELIVERY_TS BETWEEN '2016-02-01 00:00:00' AND '2016-07-31 23:59:59'
LOAD_ID 是唯一的记录标识符,每个 LOAD_ID 都有不同的 PO 类型和与之关联的案例计数。我试图找到一种方法来根据 PO 类型和案例计数的一些标准聚合 LOAD_ID 行:
例如 - 如果 PO_TYPE_CODE 20 的 CASE_QTY 大于与该 LOAD_ID 关联的总 CASE_QTY 的 50%,则将 LOAD_ID 30604179 计为“TEST”
如果 PO_TYPE_CODE 33 的 CASE_QTY 大于与该 LOAD_ID 关联的总 CASE_QTY 的 25%,则将 LOAD_ID 30604179 计为“TEST 2”
期望的输出:
任何帮助或指导将不胜感激!!!!
【问题讨论】:
-
我删除了不兼容的数据库标签。请添加回您真正使用的数据库的标签。
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(20 多年前),不鼓励使用它