我有一個Dog
表。每隻狗都有Breed
,可以有0到2張照片。我需要爲每個品種接收所有狗的照片數:與BreedId
和匹配PhotosCount
表。所以導致表應該是:來自不同列的值的SQL計數
BreedID|PhotosCount
-------------------
1 |3
-------------------
2 |1
-------------------
我有一個Dog
表。每隻狗都有Breed
,可以有0到2張照片。我需要爲每個品種接收所有狗的照片數:與BreedId
和匹配PhotosCount
表。所以導致表應該是:來自不同列的值的SQL計數
BreedID|PhotosCount
-------------------
1 |3
-------------------
2 |1
-------------------
這應該做的伎倆:
SELECT BreedID AS B, COUNT(Photo1) + COUNT(Photo2) AS C
FROM Dog
GROUP BY BreedID
COUNT
聚合函數根本不考慮NULL
值。如果對於Photo1
或Photo2
的特定BreedID
,全部值爲NULL
,則COUNT
返回0
。
這應該在單一掃描工作:
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
使用集團通過和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
是的,將COUNT和ISNULL一起使用是個好主意。在這種情況下,'NULL'值將被計數 –
明白了,感謝我更新 –
並且'GROUP BY'兩個字段也是錯誤的:)你可以在上面檢查正確的答案:) –
SELECT BreedID AS Breed, COUNT(Photo1) + COUNT(Photo2) AS #ofPhotos
FROM Dog
GROUP BY BreedID;
你的答案與接受的答案相同 – AsValeO
提示:GROUP BY,用COUNT()。 – jarlh
但哪裏來自列B和C?他們是不是狗的名字? –