使用不同 where 子句的子查询的 PostgreSQL 案例

问题描述 投票:0回答:1

尝试通过浏览并选择 2 个价格来查询正确的价格

这些按重要性从高到低排列

  1. 如果
    [tran_type]
    等于
    Quot
    则选择这个价格
  2. 如果
    [default_level]
    大于0,将是1-8之间的数字

我遇到的问题是

[default_level]
只是一个带有数值的占位符,用于表示从 1 到 8 的定价水平

[default_level]
大于 0 时的价格将作为空白
[start_cust_or_group]
存储在同一个表中,
[level_]
是与 1-8 定价级别相关的值。

所以说,如果

[default_level]
是 6,那么我需要拉动的正确价格是
[start_cust_or_group]
等于空白
[level_]
将为 6,并且可用的最新日期
[start_date]

商品或价格代码 uom_代码 tran_type 默认_级别 级别_ 价格
27MIETE11K EA 6 0 0.00
22RGRD45BS CT 引用 0 144.10

以下是我希望的最终结果 因此,对于第一个项目(27MIETE11K),它看到 tran_type 为空,然后继续前进,发现 default_level 为 6,因此选择 Level_,其中 6 和 start_cust_or_group 为空并采用该价格。那么它看到的下一个项目 (22RGRD45BS) 的 tran_type 是 quot,因此它会填充 LevelResult 中的价格(这部分带有 Quot 的查询已经可以工作)。

商品或价格代码 uom_代码 水平结果
27MIETE11K EA 29.57
22RGRD45BS CT 144.10

这是我的主要问题:

SELECT 
    [item_or_pricecode], [uom_code], 
    CASE 
        WHEN [tran_type] <> '' THEN [price] 
        WHEN [default_level] > 0 THEN XXXXXX
        ELSE 0 
    END AS LevelResult 
FROM
    [test].[tablepricing].[pricing] 
WHERE 
    [start_cust_or_group] = '7000192' 
    AND [cust_shipto_num] = '2' 
    AND [RowDeleted] = 0 
ORDER BY 
    [start_date] DESC

如果我输入

[default_level]
,代码就可以工作,但只会返回
default_level
列中
LevelResult
的值。

我认为我需要在放置

XXXXXX
的位置有一个选择查询,但我不确定如何将
[default_level]
传递给选择查询以与
[level_]
匹配,或者是否可能。

SELECT 
    x.[item_or_pricecode], x.[uom_code], x.[level_], x.[price],x.[start_date]
FROM 
    (SELECT
         x.[item_or_pricecode], x.[uom_code], x.[level_], x.[price],x.[start_date],
         ROW_NUMBER() OVER (PARTITION BY x.[item_or_pricecode] ORDER BY x.[start_date] DESC, x.[level_] ASC) AS rn
     FROM 
         [test].[tablepricing].[pricing] AS x
     WHERE
         [start_cust_or_group] = '' 
         AND [RowDeleted] = 0  
         AND [item_or_pricecode] = '27MIETE11K') AS x 
WHERE 
    x.rn <= 8
商品或价格代码 uom_代码 级别_ 价格 开始日期
27MIETE11K EA 1 38.65 2024-01-15
27MIETE11K EA 2 34.81 2024-01-15
27MIETE11K EA 3 33.05 2024-01-15
27MIETE11K EA 4 31.43 2024-01-15
27MIETE11K EA 5 30.49 2024-01-15
27MIETE11K EA 6 29.57 2024-01-15
27MIETE11K EA 7 28.97 2024-01-15
27MIETE11K EA 8 28.39 2024-01-15

这是一个单独的查询,用于显示价格水平以及我如何找到每个条目的最新日期。

通常如果我这么做了

WHERE item_or_pricecode = '27MIETE11K' 
  AND start_cust_or_group = ''

在定价表上,我会得到 78 个条目,其中混杂着较旧的价格。

我希望这能得到解释,谢谢!

sql nested subquery case
1个回答
0
投票

参见示例

select p.prod_id,p.prod_name,dates.d, coalesce(month_sale_amount,0) month_sale_amount
from dates
left join (select distinct prod_id,prod_name from product_sales) p on 1=1
left join(
  select prod_id,date_trunc('month',sale_date) sale_date
    ,sum(sale_amount) as month_sale_amount
  from product_sales
  group by prod_id,date_trunc('month',sale_date)
) total_sales on sale_date=dates.d and total_sales.prod_id=p.prod_id
order by dates.d,p.prod_id
产品 ID 产品名称 d 月份销售金额
1 测试1 2023-01-01 3
2 测试2 2023-01-01 8
3 测试3 2023-01-01 9
1 测试1 2023-02-01 5
2 测试2 2023-02-01 2
3 测试3 2023-02-01 1
1 测试1 2023-03-01 0
2 测试2 2023-03-01 7
3 测试3 2023-03-01 0
1 测试1 2023-04-01 1
2 测试2 2023-04-01 2
3 测试3 2023-04-01 0
1 测试1 2023-05-01 6
2 测试2 2023-05-01 4
3 测试3 2023-05-01 2

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.