помогите с агрегацией данных t-sql - PullRequest
0 голосов
/ 29 мая 2010

На основании следующей таблицы

Area  S1 S2 S3 S4 
--------------------
A1    5  10 20 0
A2    11 19 15 20
A3    0  0  0  20

Я хочу сгенерировать вывод, который даст количество столбцов, не имеющих «0».

Таким образом, результат будет

Area  S1 S2 S3 S4   Count 
-------------------------
A1    5  10 20 0    3
A2    11 19 15 20   4
A3    0  0  0  20   1

Ответы [ 2 ]

6 голосов
/ 29 мая 2010

Один из способов состоит в том, чтобы сложить результат операторов case вместе:

select area, s1, s2, s3, s4,
    case when S1 <> 0 then 1 else 0 end +
    case when S2 <> 0 then 1 else 0 end +
    case when S3 <> 0 then 1 else 0 end +
    case when S4 <> 0 then 1 else 0 end as Count
from YourTable
0 голосов
/ 29 мая 2010

Просто чтобы заставить вас задуматься, вы также можете сделать это с помощью объединения:

SELECT t1.*, COUNT(t2.Area) AS Count
FROM Table t1
LEFT JOIN Table t2
ON t2.Area = t1.Area AND (t2.S1 <> 0 OR t2.S2 <> 0 OR t2.S3 <> 0 OR t2.S4 <> 0)
GROUP BY Area
ORDER BY Area
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...