0

I have a table to update with other table data. For this I created a trigger. Inside trigger, I must check how many active occurrences of each id. If this number of occurrences is same number than a variable value then return 1 (true) otherwise 0 (false).

I get the variable

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

This works ok... returns 5

Then, I make a count of occurrences of the l_activo variable in other table (variable is a 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

This query also works nice, returns:

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

All perfect... now i must get same list, but if sum equals to @num_gerencias, then put 1 and 0 otherwise.

Expected result table

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

I've tried with 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

but I'm getting error:

Mens . 512 , Level 16 , State 1, Line 6 The subquery returned more than one value , which is not correct when it goes below = , ! = , <, < = ,>, > = Or when used as an expression .

I also tried with an IF (i guess this option is totally wrong for this case... but I've tried)

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

But I have syntax errors...

Any idea how can i reach expected result table?

1 Answer 1

2

You were nearly there, however your grouping and selection must occur outside of your case statement:

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
Sign up to request clarification or add additional context in comments.

3 Comments

it complains that bit cannot be used in sum
Cast the bit to an integer with CAST(l_activo AS INTEGER)
sweet answer.... really smart to use the bit value instead inner CASE thanks for your help @Wibbler :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.