系统
PostgreSQL 11.5 (Ubuntu 11.5-0ubuntu0.19.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 8.3.0-6ubuntu1) 8.3.0, 64-bit
案子
select
在case
条件下工作吗?我需要从 4 个州返回 1 个州case
。我试图解释。
Shop 有 eshop ( store_id = 7
) 和 stores ( store_id = 1 - 10
, others, but not 7
)。
Eshop 和每个商店都有available_count
- 库存。
逻辑是:
当available_count
> 1 where store_id
= 7 (eshop) then in stock
.
当available_count
= 0 where store_id
= 7 (eshop) and available_count
> 1 where store_id
!= 7 (对于所有商店,至少一个值大于 1,因为 eshop 为 0)然后in stock on store
.
当available_count
<= 1 where store_id
= 7 (eshop) 或available_count
<= 1 where store_id
!= 7 (至少一个值为 1,其他值为 0,但如果全部为 0,则not in stock
)则on request
.
当count_availability
= 0 where store_id
= 7 (eshop) and count_availability
= 0 where store_id
!= 7 (all values are 0) then not in stock
.
我试过了
case
when (select ja.available_count where ja.store_id = '7') > 1 then 'IN STOCK'
when (select ja.available_count where ja.store_id = '7') = 0 and (select ja.available_count where ja.store_id != '7') > 1 then 'IN STOCK ON STORE'
when (select ja.available_count where ja.store_id = '7') <= 1 or (select ja.available_count where ja.store_id != '7') <= 1 then 'ON REQUEST'
when (select ja.available_count where ja.store_id = '7') = 0 and (select ja.available_count where ja.store_id != '7') = 0 then 'NOT IN STOCK'
end as "availability",
它返回多个值availability
,仅返回 'IN STOCK' 或 '[NULL]',有时似乎正确值存在问题。
有更好的方法吗?
感谢您的任何帮助。
每个产品需要一行。所以需要 GROUP BY。查询看起来像
金额有 3 个通用变量 - 0、1 或 >1(如果缺少某些记录,我们必须假定其金额值为 0)。为了形式化,我们将减去 1 并得到符号(它会将数量压缩为 -1、0 或 +1 的 3 个值)。因为
store_id != 7
我们只能获得最大值而忽略所有其他值。因此可以在 CTE 中准备源数据,最终查询将是测试这个。请自行填写最终案例中的变体,请...