价值 = 0 而其他订单项 > 0

Posted

技术标签:

【中文标题】价值 = 0 而其他订单项 > 0【英文标题】:value = 0 while other line items > 0 【发布时间】:2018-05-22 01:07:22 【问题描述】:

我想知道如何编写一个查询,其中具有多个行项目的唯一 ID 将有一个具有特定代码的行项目,我们称之为 A4445,其中费用金额 = 0,而所有其他行与其他行链接到该 ID 的 A4445 以外的代码将大于 0,如下所示。如果数据看起来像这样:

   ID    | line item |  code  | Charge |
---------+-----------+--------+---------
 3334400 |     1     | A4445  | 32.50  |
 3334400 |     2     | B0021  |  0.00  | 
 3334400 |     3     | B0666  |  9.00  | 

但我想要 A4445 代码 = 0.00 且其他行的收费金额大于 0 的 ID

   ID    | line item |  code  | Charge |
---------+-----------+--------+---------
 3334422 |     1     | A4445  |  0.00  |
 3334422 |     2     | B0021  | 12.30  | 
 3334422 |     3     | B0666  |  9.00  | 

我目前正在使用 union all 功能,但我认为它不起作用。这是我的查询:

Select 
       ID,
       Line item,
       Code,
       Charge    
from   
       claim    
where 
       code = 'A4445'
and    charge = 0.00

union all

Select 
       ID,
       Line item,
       Code,
       Charge    
from  
       claim    
where 
       code <> 'A4445'
and    charge > 0.00

我不确定如何表达这一点,但希望上面的插图能让您了解我在寻找什么

【问题讨论】:

A4445 是硬编码的吗?也不太了解您关于A4445 code = 0.00 的第二个条件。请详细说明 @Squirrel 是的,A4445 代码是强制性的。我希望 ID 的 A4445 代码等于 0.00,但我希望附加到 ID 的其他行不等于 0 【参考方案1】:

我相信你想要:

select c.id
from claim c
group by c.id
having max(case when c.code = 'A4445' then c.charge end) = 0 and
       min(case when c.code <> 'A4445' then c.charge end) > 0;

这假设charge 永远不会是负数(您的数据中没有此类示例)。支持负电荷很容易,但逻辑有点复杂。

如果您想要原始行,可以将其与 joinexistsin 一起使用来获取这些值。不过,我可能会使用not exists

select c.*
from claims c
where not exists (select 1
                  from claims c2
                  where c2.id = c.id and c2.code = 'A4445' and c2.charge <> 0
                 ) and
      not exists (select 1
                  from claims c2
                  where c2.id = c.id and c2.code <> 'A4445' and c2.charge = 0
                 );

【讨论】:

“选择1”的目的是什么? @user9637230 。 . . not exists 只关心返回的行。我发现“1”是最简单的输入。

以上是关于价值 = 0 而其他订单项 > 0的主要内容,如果未能解决你的问题,请参考以下文章

在 woocommerce 3 中获取订单项的元数据

如何在php上获得价值127.0.0.1而不是::1

添加 ubercart 订单项并更新订单总额

WooCommerce API:在订单项上创建包含元数据的订单

在 vue 中一次设置一个订单项“活动”

如何从 Woocommerce 中的订单项中获取产品 sku [重复]