检查物料的尺寸是否大于给定值

check that the dimensions of item are greater than given values

提问人:cpbr 提问时间:11/13/2021 最后编辑:cpbr 更新时间:11/13/2021 访问量:193

问:

我正在尝试编写一个 SQL 查询,其中将提取包含所有项目及其维度的数据,并且必须满足以下条件:长度 >=20 或宽度 >=14 或高度 >=10(所有不适合 20x14x10 容器的项目)。问题在于高度可能大于长度(想象一下在空间中翻转物品)。我写了一个代码,但我认为它不会涵盖所有情况。以下是我尝试过的代码:

select 
items.bin_id,
items.bin_type_name,    
items.bin_usage_name,    
items.isbn,
items.boo,
items.quantity,
ma.pkg_height,
ma.pkg_width,  
ma.pkg_length,    
ma.pkg_weight,
items.owner
from items 
left join BOOKER.D_MP_PHYSICAL_ITEMS ma
on items.boo = ma.asin

where ((ma.pkg_length >= 20 AND ma.pkg_width >= 14 AND ma.pkg_height >= 10) OR 
    (ma.pkg_length >= 14 AND ma.pkg_width >= 10 AND ma.pkg_height >= 20) OR 
    (ma.pkg_length >= 10 AND ma.pkg_width >= 20 AND ma.pkg_height >= 14) OR

    ((ma.pkg_length >= 20 AND ma.pkg_width >= 10 AND ma.pkg_height >= 14) OR 
    (ma.pkg_length >= 14 AND ma.pkg_width >= 20 AND ma.pkg_height >= 10) OR     
    (ma.pkg_length >= 10 AND ma.pkg_width >= 14 AND ma.pkg_height >= 20))
     

我的另一个想法是从项目的维度中选择最大值并检查它是否大于 20,然后选择最小值并查看它是否大于 10 并检查最后一个数字是否大于 14(如果两个第一个值给出 FALSE),但我不能把它放在 SQL 中

SQL 比较 维度

评论


答:

0赞 Himanshu Agrawal 11/13/2021 #1

我想下面的逻辑会起作用(基本上,我已经尝试为您在问题的后面部分提到的逻辑编写一个查询):

with temp_cte as (
    select 
    items.*, ma.*,
    Select dim from
      (SELECT dim, row_number() over (order by dim desc) as rn
       FROM (VALUES (ma.pkg_length), (ma.pkg_height), (ma.pkg_width)) AS value(dim)) where rn = 1) as length,
    Select dim from
      (SELECT dim, row_number() over (order by dim desc) as rn
       FROM (VALUES (ma.pkg_length), (ma.pkg_height), (ma.pkg_width)) AS value(dim)) where rn = 2) as height,
    Select dim from
      (SELECT dim, row_number() over (order by dim desc) as rn
       FROM (VALUES (ma.pkg_length), (ma.pkg_height), (ma.pkg_width)) AS value(dim)) where rn = 3) as width
    from items 
    left join BOOKER.D_MP_PHYSICAL_ITEMS ma
    on items.boo = ma.asin
    where 
        length >= 20 or height >= 14 or width >= 10
)

Select 
    bin_id,
    bin_type_name,    
    bin_usage_name,    
    isbn,
    boo,
    quantity,
    pkg_height,
    pkg_width,  
    pkg_length,    
    pkg_weight,
    owner
from temp_cte;