Np .: stół

id a  b  c  d 
1  Y  Y  Y  N
2  N  Y  Y  N

To, czego potrzebuję, to

id a  b  c  d  e
1  Y  Y  Y  N  3
2  N  Y  Y  N  2
1
ambigfamous 16 marzec 2020, 07:56

2 odpowiedzi

Najlepsza odpowiedź

Funkcje SQL generalnie agregują dane w wierszach, a nie w kolumnach, więc nie sądzę, aby można było to zrobić w sposób ogólny. Możesz jednak w tym przypadku użyć serii wyrażeń case:

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
2
Mureinik 16 marzec 2020, 05:00
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  
0
MBadrian 16 marzec 2020, 05:12