提问人:cpbr 提问时间:11/13/2021 最后编辑:cpbr 更新时间:11/13/2021 访问量:193
检查物料的尺寸是否大于给定值
check that the dimensions of item are greater than given values
问:
我正在尝试编写一个 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 中
答:
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;
评论