You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选同一BOM下所有Imported值均为True的行?

筛选所有组件已导入的BOM行

要实现只保留同一BOM下所有Imported值均为True的行,可以用以下几种SQL方法:

方法1:先筛选有效BOM再关联原表

先通过分组找到所有无False记录的BOM,再和原表关联获取完整行数据:

SELECT t.*
FROM your_table t
INNER JOIN (
    SELECT BOM
    FROM your_table
    GROUP BY BOM
    -- 若Imported是布尔型,直接用MIN(Imported) = TRUE;若为字符串则调整判断逻辑
    HAVING MIN(CAST(Imported AS BIT)) = 1
) valid_boms ON t.BOM = valid_boms.BOM

逻辑:分组后用MIN函数判断该BOM下所有Imported的最小值,若最小值为True(或转成1),说明没有False记录,属于有效BOM。

方法2:用NOT EXISTS排除含False的BOM

直接判断当前行的BOM是否不存在任何Imported为False的记录:

SELECT *
FROM your_table t
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table
    WHERE BOM = t.BOM
      AND Imported = 'False' -- 根据实际数据类型调整,比如布尔型用Imported = FALSE
)

逻辑:对每一行检查同BOM下有没有False条目,没有则保留该行。

方法3:窗口函数标记有效BOM

用窗口函数给每个BOM添加标记,标记该BOM是否所有Imported都是True,再筛选标记为有效的行:

SELECT BOM, Imported
FROM (
    SELECT 
        BOM, 
        Imported,
        -- 按BOM分组计算最小Imported值,全为True则结果为1
        MIN(CAST(Imported AS BIT)) OVER (PARTITION BY BOM) AS is_valid_bom
    FROM your_table
) sub_query
WHERE is_valid_bom = 1

逻辑:窗口函数OVER (PARTITION BY BOM)会给同一BOM的所有行计算相同的标记值,筛选标记为1的行即可。

注意事项

  • 若Imported列是原生布尔类型(而非字符串),可去掉CAST(Imported AS BIT),直接用MIN(Imported) = TRUE判断。
  • 替换your_table为实际表名。

内容的提问来源于stack exchange,提问作者Hamish Duff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:10:36