Reputation: 23
eg: table
id a b c d
1 Y Y Y N
2 N Y Y N
what I need is
id a b c d e
1 Y Y Y N 3
2 N Y Y N 2
Upvotes: 1
Views: 46
Reputation: 409
UPDATE mytable SET e=
CASE a WHEN 'Y' THEN 1 ELSE 0 END +
CASE b WHEN 'Y' THEN 1 ELSE 0 END +
CASE c WHEN 'Y' THEN 1 ELSE 0 END +
CASE d WHEN 'Y' THEN 1 ELSE 0 END
FROM
Upvotes: 0
Reputation: 311808
SQL functions generally aggregate data across rows, not columns, so I don't think there's a generic way of doing this. You could, however, for this usecase, use a series of case
expressions:
SELECT id, a, b, c, d,
CASE a WHEN 'Y' THEN 1 ELSE 0 END +
CASE b WHEN 'Y' THEN 1 ELSE 0 END +
CASE c WHEN 'Y' THEN 1 ELSE 0 END +
CASE d WHEN 'Y' THEN 1 ELSE 0 END AS e
FROM mytable
Upvotes: 2