gpt4 book ai didi

mysql - sql 将选择计算声明为变量以在查询中进一步使用

转载 作者:行者123 更新时间:2023-11-29 20:58:41 27 4
gpt4 key购买 nike

我想将选择查询内的特定计算更改为变量,以便重新处理查询内其他计算的结果。在此示例中,我需要作为变量的值是 dt_raw。到目前为止,我还没有成功实现解决方案。

SELECT
cpe.entity_id AS product_id,
cpe.sku,
CASE
WHEN (csi.qty - csi.stock_ordered_qty) >= cped2.value AND csi.stock_id = 3 /* on stock burgsdorgstrasse */
THEN 3
WHEN (csi.qty - csi.stock_ordered_qty) >= cped2.value AND csi.stock_id = 4 /* on stock hoppegarten */
THEN 7
WHEN sum(sm_qty) > 2 AND csi.stock_id = 3 /* history burgsdorfstrasse */
THEN round(avg(DATEDIFF(sm.sm_date, po.po_date)) + 3)
WHEN sum(sm_qty) > 2 AND csi.stock_id = 4 /* history hoppegarten */
THEN round(avg(DATEDIFF(sm.sm_date, po.po_date)) + 4)
ELSE cped.value /* default_delivery_time */
END AS dt_raw


FROM `test_live`.`catalog_product_entity` cpe

LEFT JOIN `test_live`.`cataloginventory_stock_item` csi
ON cpe.entity_id = csi.product_id

LEFT JOIN `test_live`.`catalog_product_entity_decimal` cped /* default_delivery_time */
ON cpe.entity_id = cped.entity_id
AND cped.attribute_id = 392

LEFT JOIN `test_live`.`catalog_product_entity_decimal` cped2 /* min_qty_delivery_time */
ON cpe.entity_id = cped2.entity_id
AND cped2.attribute_id = 393

LEFT JOIN `test_live`.`stock_movement` sm
ON cpe.entity_id = sm.sm_product_id
AND sm.sm_type = "supply"
AND sm.sm_date > NOW() - Interval 90 DAY

LEFT JOIN `test_live`.`purchase_order` po
ON po.po_num = sm.sm_po_num


WHERE
csi.is_favorite_warehouse = 1
AND (csi.stock_id = 3 OR csi.stock_id = 4)

GROUP BY cpe.entity_id

我想在进一步计算中使用dt_raw的结果。

例如:

concat ("ca. ", round(dt_raw), " weeks") as delivery_time

CASE
WHEN dt_raw <= 30
THEN 50
ELSE 0
END AS amazon_qty

最佳答案

如果您想不受限制地使用查询结果,您应该将其保存在表中。之后使用选择来获取您想要的数据。

创建

CREATE TABLE your_schema.dt_raw_temp
SELECT
cpe.entity_id AS product_id,
cpe.sku,
CASE
WHEN (csi.qty - csi.stock_ordered_qty) >= cped2.value AND csi.stock_id = 3 /* on stock burgsdorgstrasse */
THEN 3
WHEN (csi.qty - csi.stock_ordered_qty) >= cped2.value AND csi.stock_id = 4 /* on stock hoppegarten */
THEN 7
WHEN sum(sm_qty) > 2 AND csi.stock_id = 3 /* history burgsdorfstrasse */
THEN round(avg(DATEDIFF(sm.sm_date, po.po_date)) + 3)
WHEN sum(sm_qty) > 2 AND csi.stock_id = 4 /* history hoppegarten */
THEN round(avg(DATEDIFF(sm.sm_date, po.po_date)) + 4)
ELSE cped.value /* default_delivery_time */
END AS dt_raw


FROM `test_live`.`catalog_product_entity` cpe

LEFT JOIN `test_live`.`cataloginventory_stock_item` csi
ON cpe.entity_id = csi.product_id

LEFT JOIN `test_live`.`catalog_product_entity_decimal` cped /* default_delivery_time */
ON cpe.entity_id = cped.entity_id
AND cped.attribute_id = 392

LEFT JOIN `test_live`.`catalog_product_entity_decimal` cped2 /* min_qty_delivery_time */
ON cpe.entity_id = cped2.entity_id
AND cped2.attribute_id = 393

LEFT JOIN `test_live`.`stock_movement` sm
ON cpe.entity_id = sm.sm_product_id
AND sm.sm_type = "supply"
AND sm.sm_date > NOW() - Interval 90 DAY

LEFT JOIN `test_live`.`purchase_order` po
ON po.po_num = sm.sm_po_num


WHERE
csi.is_favorite_warehouse = 1
AND (csi.stock_id = 3 OR csi.stock_id = 4)

GROUP BY cpe.entity_id;

选择

SELECT CONCAT('ca. ', round(dt_raw), ' weeks') AS delivery_time, 
IF(dt_raw <= 30, 50, 0) AS amazon_qty
FROM your_schema.dt_raw_temp;

The advantage of using tables is that you can reproduce your calculations at any given moment as long as you keep your tables.

关于mysql - sql 将选择计算声明为变量以在查询中进一步使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37410553/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com