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

OutSystems Advanced SQL PIVOT查询筛选多激活选项设备求助

问题原因

你之前在内层查询加过滤条件会直接过滤掉未命中指定选项的行,导致PIVOT转换后只能保留过滤后的选项列,丢失了设备的其他选项状态。

解决方案

方案1:在PIVOT后的外层查询加过滤条件(最简便,适配现有代码)

直接在外层查询增加WHERE子句,对转成列的指定选项做=1的判断即可,既保留全量选项的列数据,又能筛选出符合要求的设备,修改后代码示例如下:

SELECT MachineID, MachineSN ,@StringIn
FROM (    
    SELECT {Machine}.[Id] as MachineID,
            {Options}.[Name] as OptionName,
            {MachineOption}.[OptionActive] as IsActive,
            {Machine}.[SNumber] as MachineSN
    FROM {MachineOption}
    INNER JOIN {Options} ON {Options}.[Id] = {MachineOption}.[OptionId]
    INNER JOIN {Machine} ON {Machine}.[Id] = {MachineOption}.[MachineId]     
    GROUP BY {Options}.[Name], {MachineOption}.[OptionActive], {Machine}.[SNumber], {Machine}.[Id]
) R
Pivot (max(IsActive) for OptionName in (@StringIn)) as PivotedResult
-- 此处新增筛选条件,示例为筛选同时激活X、Y两个选项的设备
WHERE X = 1 AND Y = 1
Order By MachineID

如果你的@StringIn是动态拼接的列名,WHERE条件也可以同步动态拼接,直接生成指定选项1=1 AND 指定选项2=1 ...的格式追加即可。

方案2:预筛选符合条件的设备ID再关联(大数据量下性能更优)

如果设备数据量较大,可以先单独查询出同时激活指定选项的设备ID集合,再关联回原表取全量选项数据,避免全量PIVOT后再过滤的性能损耗:

-- 预筛选符合多选项同时激活要求的设备ID
WITH TargetMachines AS (
    SELECT MachineId
    FROM {MachineOption}
    INNER JOIN {Options} ON {Options}.[Id] = {MachineOption}.[OptionId]
    WHERE {Options}.[Name] IN ('X','Y') -- 替换为你要筛选的指定选项列表
        AND {MachineOption}.[OptionActive] = 1
    GROUP BY MachineId
    -- 计数等于指定选项的总个数,确保所有指定选项都处于激活状态
    HAVING COUNT(DISTINCT {Options}.[Name]) = 2
)
-- 仅对符合条件的设备做PIVOT,保留全量选项状态
SELECT MachineID, MachineSN ,@StringIn
FROM (    
    SELECT m.[Id] as MachineID,
            o.[Name] as OptionName,
            mo.[OptionActive] as IsActive,
            m.[SNumber] as MachineSN
    FROM {MachineOption} mo
    INNER JOIN {Options} o ON o.[Id] = mo.[OptionId]
    INNER JOIN {Machine} m ON m.[Id] = mo.[MachineId]
    INNER JOIN TargetMachines tm ON tm.MachineId = m.[Id]
    GROUP BY o.[Name], mo.[OptionActive], m.[SNumber], m.[Id]
) R
Pivot (max(IsActive) for OptionName in (@StringIn)) as PivotedResult
Order By MachineID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:54:04