2016-10-03 26 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值。如果對於Photo1Photo2的特定BreedID,全部值爲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

使用集團通過SUM中照片1和照片2:

注:如果你想爲你的每個狗輸出將DogId包含在group子句中。

;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