2016-10-03 2 views
0

У меня есть таблица Dog. Каждая собака имеет Breed и может иметь от 0 до 2 фотографий. Мне нужно получить количество фотографий всех собак для каждой породы: стол с BreedId и соответствующий PhotosCount. Поэтому в результате таблица должна быть:SQL-значение значений из разных столбцов

BreedID|PhotosCount 
------------------- 
1  |3 
------------------- 
2  |1 
------------------- 

Dogs

+3

Подсказка: GROUP BY, с COUNT(). – jarlh

+0

, но откуда взяты столбцы B и C? Это имена собак? –

ответ

5

Это должно сделать трюк:

SELECT BreedID AS B, COUNT(Photo1) + COUNT(Photo2) AS C 
FROM Dog 
GROUP BY BreedID 

COUNT агрегатная функция просто не принимает во внимание NULL значения. Если для конкретных BreedID, все значения Photo1 или Photo2 являются NULL, то COUNT возвращает 0.

1

Это должно работать в одном сканировании:

SELECT 
    BreedID, 
    SUM(CASE WHEN Photo1 IS NOT NULL THEN 1 ELSE 0 END) 
    + SUM(CASE WHEN Photo2 IS NOT NULL THEN 1 ELSE 0 END) [Count] 
FROM Table 
GROUP BY BreedID 
1

Использование Group By и SUM Из Фото1 и Фото2:

Примечание: Если хочет выход для каждой собаки у вас есть включить предложение DogId в группу.

;WITH T AS 
(
    SELECT   
     BreedId, 
     SUM (CASE ISNULL(Photo1,0) WHEN 1 THEN 1 ELSE 0 END) AS Photo1, 
     SUM (CASE ISNULL(Photo2,0) WHEN 1 THEN 1 ELSE 0 END) AS Photo2 
    FROM TableName 
    Group By BreedId 
) 
SELECT  
    BreedId, 
    SUM(Photo1+Photo2) AS TotalPhoto 
FROM T 

Или просто

SELECT   
    BreedId, 
    SUM (CASE ISNULL(Photo1,0) WHEN 1 THEN 1 ELSE 0 END + CASE ISNULL(Photo2,0) WHEN 1 THEN 1 ELSE 0 END) AS TotalPhoto  
FROM TableName 
Group By BreedId 
+1

Да, это плохая идея использовать 'COUNT' и' ISNULL' вместе. Значения 'NULL' будут подсчитываться в этом случае –

+0

Получил это, обновив меня –

+0

И два поля« GROUP BY »также ошибочны :) Вы можете просто проверить правильный ответ выше :) –

0
SELECT BreedID AS Breed, COUNT(Photo1) + COUNT(Photo2) AS #ofPhotos 
FROM Dog 
GROUP BY BreedID; 
+0

ответ такой же, как и принятый – AsValeO

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