【问题标题】:Is it possible to have custom data with custom columns with one SQL [closed]是否可以使用一个 SQL 来使用自定义列的自定义数据 [关闭]
【发布时间】:2021-12-23 21:39:00
【问题描述】:

是否有可能从 2 个表中得到这样的结果: ps:1号仓库,……我的意思是我所有的仓库

现在我正在执行一个 for 循环并为每个 sku 获取数据,如下所示:

首先从 products 表中获取所有产品:

SELECT id, sku FROM products

然后对此做一个for循环:

SELECT ware.id, ware.name, ware_inv.available as inventory,
ware_inv.id as inventoryName, ware.country
FROM warehouses as ware JOIN warehouse_inventory as ware_inv
ON ware.id = ware_inv.warehouse_id
WHERE ware.store_id = $1
AND ware_inv.sku = $2

仓库表架构:

仓库库存表架构:

warehouse_inventory 中的warehouse_id 是仓库表的外键。

【问题讨论】:

  • 问题不清楚,您的查询当前返回列 ->ware.id, ware.name, ware_inv.available 作为库存, ware_inv.id 作为库存名称, ware.country 但预期输出是不同的?。你能显示仓库和仓库库存的预期输出和值吗
  • @GeorgeJoseph 对不起,我的错。是的,首先我从产品表中获取所有产品,然后在 for 循环中获取每个 sku 的所有仓库数据。
  • 你必须共享所有表的预期输出和数据-> products、warehouse、warehouse_inventory
  • Images 不应用于文本数据,例如表格和结果。由于 SQL 包含数据定义,minimal reproducible example 应包含用于示例表(而不是临时表规范或图像)的 DDL 语句和用于示例数据(而不是转储或临时格式)的 DML 语句。示例结果不需要是代码。
  • 有关how to ask good questions 和许多其他有用主题的更多信息,请参见帮助中心。

标签: sql database postgresql


【解决方案1】:

条件聚合是一种适用于大多数 RDBMS 的旋转方式。

SELECT product.sku, warehouse.store_id
, SUM(CASE WHEN warehouse.name = 'warehouse 1' THEN inventory.available END) AS "warehouse 1"
, SUM(CASE WHEN warehouse.name = 'warehouse 2' THEN inventory.available END) AS "warehouse 2"
, SUM(CASE WHEN warehouse.name = 'warehouse 3' THEN inventory.available END) AS "warehouse 3"
, SUM(CASE WHEN warehouse.name = 'warehouse 4' THEN inventory.available END) AS "warehouse 4"
, SUM(inventory.available) AS "available"
FROM products AS product
LEFT JOIN warehouse_inventory AS inventory 
  ON inventory.sku = product.sku
LEFT JOIN warehouses AS warehouse
  ON warehouse.id = inventory.warehouse_id
WHERE product.sku = $2
  AND (warehouse.store_id = $1 OR warehouse.id IS NULL)
GROUP BY product.sku, warehouse.store_id

因为它在产品上留下了连接,这甚至会显示在任何仓库中都不可用的 sku。

【讨论】:

猜你喜欢
  • 2019-07-16
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
相关资源
最近更新 更多