2016-11-01 2 views
1

У меня есть таблица вроде этого:Counting на несколько столбцов

+------------+---------------+-------------+ 
|store_number|entrance_number|camera_number| 
+------------+---------------+-------------+ 
|   1 |    1 |   1 | 
|   1 |    1 |   2 | 
|   2 |    1 |   1 | 
|   2 |    2 |   1 | 
|   2 |    2 |   2 | 
|   3 |    1 |   1 | 
|   4 |    1 |   1 | 
|   4 |    1 |   2 | 
|   4 |    2 |   1 | 
|   4 |    3 |   1 | 
+------------+---------------+-------------+ 

В целом магазины пронумерованы от 1 и выше, входы пронумерованы от 1 и для каждого магазина, а камеры пронумерованы от 1 и до для каждого входа.

Что я хочу сделать, это подсчитать, сколько всего входов в общей сложности и сколько камер в целом для каждого магазина. Изготовление этого результата из приведенной выше таблицы:

+------------+---------------+-------------+ 
|store_number|entrances  |cameras  | 
+------------+---------------+-------------+ 
|   1 |    1 |   2 | 
|   2 |    2 |   3 | 
|   3 |    1 |   1 | 
|   4 |    3 |   4 | 
+------------+---------------+-------------+ 

Как я могу рассчитывать на несколько столбцов для получения этого результата?

ответ

10

Вы можете сделать это с помощью GROUP BY и COUNT() каждого пункта:

Select Store_Number, 
     Count(Distinct Entrance_Number) as Entrances, 
     Count(Camera_Number) As Cameras 
From  YourTable 
Group By Store_Number 

Из того, что я могу сказать от вашего ожидаемого результата, вы смотрите на количество камер, которые появляются, в то же время ищет для DISTINCT количество входов.

+1

Использование отличное было ключевое слово Я отсутствовал – Espen

+0

слишком хороший @Siyual :) –

0

Это будет работать так же,

DECLARE @store TABLE 
(store_number INT,entrance_number INT,camera_number INT) 
INSERT INTO @store VALUES(1,1,1),(1,1,2),(2,1,1),(2,2,1), 
(2,2,2),(3,1,1),(4,1,1),(4,1,2),(4,2,1),(4,3,1) 

SELECT AA.s store_number, BB.e entrances,AA.c cameras FROM (

SELECT s,COUNT(DISTINCT c) c FROM (SELECT store_number s, 
CONVERT(VARCHAR,store_number) + CONVERT(VARCHAR,entrance_number) + 
CONVERT(VARCHAR,camera_number) c FROM @store) A GROUP BY s) AA 

LEFT JOIN 

(SELECT s,COUNT(DISTINCT e) e FROM (SELECT store_number s, 
CONVERT(VARCHAR,store_number) + CONVERT(VARCHAR,entrance_number) e 
FROM @store) B GROUP BY s) BB ON AA.s = BB.s 

Надеется, что это помогло. :)

Смежные вопросы