【问题标题】:how to select the lower value product of matching SKU如何选择匹配SKU价值较低的产品
【发布时间】:2022-09-28 13:54:11
【问题描述】:

我有两个供应商,我试图过滤产品以实现以下目标:

  • 从表 1(供应商 1)中选择尚未出现在表 3 中的产品,并对类别进行一些进一步过滤(工作中)
  • 从表 2(供应商 2)中选择尚未出现在表 3(工作)中的产品
  • 表 1 和表 2 中有重复的产品。我想过滤这些,所以结果表没有重复的产品,但我想通过选择更便宜的供应商费率作为最终在表中的产品来做到这一点。 (坚持这个)。

我目前的 SQL 查询是下面的,它执行前两项,但我不确定如何修改以使上面的第三项工作。任何建议都非常感谢。

SELECT Vendor, 
       VendorStockCode AS SKU, 
       StockDescription AS Description, 
       StockAvailable AS Stock 
  FROM Table1 
 WHERE NOT EXISTS (SELECT sku 
                     FROM Table3_product_meta_lookup
                    WHERE Table1.VendorStockCode = Table3_product_meta_lookup.sku) 
   AND PrimaryCategory != \'SERVICES\' 
   AND PrimaryCategory != \'WARRANTY\'  
   AND cast(DealerEx as decimal(10,2)) <= cast(\'15000.00\' as decimal(10,2))
UNION 
SELECT Manufacture_Name, 
       Manufacture_Code, 
       Short_Description,
       Stock_Qty 
  FROM Table2 
 WHERE NOT EXISTS (SELECT sku 
                     FROM Table3_product_meta_lookup 
                    WHERE Manufacture_Code = Table3_product_meta_lookup.sku)
  • 您使用哪个版本的 MySQL?
  • 我相信它是5.7版。使用 phpMyAdmin

标签: mysql mariadb


【解决方案1】:

好的,经过一些实验,我遵循了与我所拥有的类似的路线,并且似乎正在工作。不确定这是否是最有效的方式,但正在获取我想要的数据。感谢那些回复的人。我粘贴了下面的最终查询以供参考:

SELECT Vendor, VendorStockCode AS SKU, 
       StockDescription AS Description, 
       StockAvailable AS Stock 
 FROM Table1 
WHERE NOT EXISTS (
       SELECT sku 
         FROM Table3_product_meta_lookup 
        WHERE Table1.VendorStockCode = Table3_product_meta_lookup.sku ) 
  AND PrimaryCategory != 'SERVICES' 
  AND PrimaryCategory != 'WARRANTY'  
  AND CAST(DealerEx AS DECIMAL(10,2)) <= CAST('15000.00' AS DECIMAL(10,2)) 
  AND NOT EXISTS (
       SELECT Manufacture_Code 
         FROM Table2 
        WHERE VendorStockCode = Manufacture_Code 
          AND CAST(DealerEx AS DECIMAL(10,2)) >= CAST(ExTax AS DECIMAL(10,2))) 
      UNION 
SELECT Manufacture_Name, Manufacture_Code, Short_Description, 
               Stock_Qty 
 FROM Table2 
WHERE NOT EXISTS ( 
        SELECT sku 
          FROM Table3_product_meta_lookup 
         WHERE Manufacture_Code = Table3_product_meta_lookup.sku ) 
  AND NOT EXISTS ( 
         SELECT VendorStockCode 
           FROM Table1 
          WHERE VendorStockCode = Manufacture_Code 
            AND CAST(DealerEx AS DECIMAL(10,2)) < CAST(ExTax AS DECIMAL(10,2)));

【讨论】:

    【解决方案2】:

    如何计算供应商率? 您想删除重复的产品并留下供应商率较低的产品吗?

    假设您已经收集了 table1 和 table2 中的所有数据以及 supplier_rate 列并将它们合并到表'table_a'中。 使用不同的供应商过滤重复的 SKU 并留下一个较低费率的供应商会更容易。 下面的测试查询。

    select vendor,sku,stock from (
    select vendor,sku,stock,supplier_rate,rank() over(PARTITION by sku order by supplier_rate) as rk from table_a) pd
    where rk = 1;
    

    输入表数据:

    vendorname      sku stock   supplier_rate
    vendor1         100 1000    30
    Manufacture1    100 2000    40
    vendor3         200 1500    50
    Manufacture2    300 2000    60
    Manufacture3    200 1200    25
    

    输出表数据:

    vendorname      sku stock
    vendor1         100 1000
    Manufacture3    200 1200
    Manufacture2    300 2000
    

    【讨论】:

    • 是的,对我来说,这就像一个 IF 语句。如果 SKU 匹配则选择最低供应商价格,只是不知道如何将其添加到语句中
    猜你喜欢
    • 2021-07-30
    • 2018-04-26
    • 2013-01-14
    • 2015-09-13
    • 1970-01-01
    • 2015-11-01
    • 2014-01-27
    • 2016-04-04
    • 2020-10-29
    相关资源
    最近更新 更多