[英]How best to Count(*) with a CASE STATEMENT?
以下 SQL(在 SQL Server 上)返回錯誤:
'*' 附近的語法不正確
使用以下 SELECT 語句是否存在固有的錯誤?:
SELECT
COUNT(CASE WHEN <conditions> THEN * ELSE NULL END) as conditionalcountall
FROM TABLE
我嘗試了這種變體,但也失敗了:
SELECT
CASE WHEN <conditions> THEN COUNT(*) ELSE NULL END as conditionalcountall
FROM TABLE
我傾向於喜歡 sum()
SELECT
SUM(CASE WHEN <conditions> THEN 1 ELSE 0 END) as conditionalcountall
FROM TABLE
試試這個,它已經過測試
SELECT
CASE WHEN 1 = 1 THEN COUNT(*) ELSE NULL END as conditionalcountall
FROM TABLE
1 = 1
是示例條件
演示:-
Create table #temp (id int , col1 varchar (10))
go
insert into #temp values (1 , 'aaaa')
insert into #temp values (2 , 'bbbb')
insert into #temp values (3 , 'cccc')
SELECT
CASE WHEN 1 = 1 THEN COUNT(*) ELSE NULL END as conditionalcountall
FROM #temp
結果:
在像id = 1
這樣的 Case Condation 中,您應該在查詢中的CASE
cluse 中select Count(*)
像這樣:
SELECT
CASE WHEN id = 1 THEN (select COUNT(*) from #temp) ELSE NULL END as conditionalcountall
FROM #temp
結果:-
注意:如果你直接使用Count(*)
,你計算了 id 列,所以你應該使用group by
作為下一個:
SELECT
CASE WHEN id = 1 THEN COUNT(*) ELSE NULL END as conditionalcountall
FROM #temp
group by id
結果:
SELECT
CASE WHEN X THEN Y
ELSE Z
END *NEW COLUMN NAME*
, COUNT(*)
FROM
TABLE
GROUP BY
*NEW COLUMN NAME*
這應該返回兩列,一列是buckets/case語句,另一列是每個bucket的列數
這個方法對我來說是最直接的
如果你真的,真的想使用COUNT
,那么你可以這樣做:
SELECT
COUNT(*)
FROM table
WHERE <conditions>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.