簡體   English   中英

如何最好地使用 CASE STATEMENT Count(*)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM