当count等于sql server中的变量时返回值

时间:2015-07-09 11:50:57

标签: sql sql-server database case

我有一个表用其他表数据更新。为此,我创建了一个触发器。在内部触发器中,我必须检查每个id活动次数。如果此次出现次数与变量值相同,则返回1 (true),否则0 (false)

我得到了变量

DECLARE @num_gerencias numeric(2, 0)
SELECT @num_gerencias = (SELECT COUNT(id_gerencia) FROM FR_GERENCIES)
select @num_gerencias

这样可行......返回5

然后,我计算了其他表中l_activo变量的出现次数(变量是bit):

SELECT id_operacio, SUM(CASE WHEN l_activo = 1 THEN 1 ELSE 0 END)
                FROM FR_GERENCIES_OPERACIONS o 
                GROUP BY o.id_operacio

此查询也很好用,返回:

2958    5
2959    0
2960    5
2961    3
2962    5
2963    5
2964    2
2965    4
2966    5
2967    5

所有完美...现在我必须获得相同的列表,但如果sum等于@num_gerencias,则将1和0设置为否则。

预期结果表

2958    1
2959    0
2960    1
2961    0
2962    1
2963    1
2964    0
2965    0
2966    1
2967    1

我尝试过CASE

SELECT DISTINCT id_operacio, CASE WHEN 
            (
                SELECT SUM(CASE WHEN l_activo = 1 THEN 1 ELSE 0 END)
                FROM FR_GERENCIES_OPERACIONS o 
                GROUP BY o.id_operacio
            ) = @num_gerencias THEN 1 ELSE 0 END

但是我收到了错误:

  男士。 512,Level 16,State 1,Line 6   子查询返回了多个值,当它低于=时,这是不正确的! =,<,< =,>,> =或者当用作表达式时。

我也试过IF(我猜这个选项对于这个案子来说完全错了......但我已经尝试过了)

SELECT DISTINCT id_operacio,
    IF @num_gerencias = (SELECT SUM(CASE WHEN l_activo = 1 THEN 1 ELSE 0 END)
            FROM FR_GERENCIES_OPERACIONS o 
            GROUP BY o.id_operacio) 
    1
    ELSE 0
FROM FR_GERENCIES_OPERACIONS

但我有语法错误......

我知道如何才能达到预期结果表

1 个答案:

答案 0 :(得分:2)

你几乎就在那里,但你的分组和选择必须在你的案例陈述之外发生:

SELECT DISTINCT 
    id_operacio
    ,CASE 
        WHEN SUM(CAST(l_activo AS INTEGER)) = @num_gerencias THEN 1 
        ELSE 0
    END
FROM FR_GERENCIES_OPERACIONS o 
GROUP BY o.id_operacio