SELECT
SUM(CASE WHEN [A科目分數] BETWEN 90 AND 100 THEN 1 ELSE 0 END) AS [Up90_A]
,SUM(CASE WHEN [A科目分數] BETWEEN 80 AND 89 THEN 1 ELSE 0 END) AS [Up80_A]
,......
,SUM(CASE WHEN [B科目分數] BETWEEN 90 AND 100 THEN 1 ELSE 0 END) AS [Up90_B]
,......
FROM [Test]
※ 引述《Litfal (Litfal)》之銘言:
: 資料庫名稱:SQL Server
: 資料庫版本:均可
: 內容/問題描述:
: 有辦法在一次Table scan中,就做掉多個條件欄位的統計嗎?
: 例如,我要統計某次考試中,每個分數區間的總人數,
: 如 60~69、70~79、80~89、90~100 區間的個別人數。
: 邏輯上來說應該掃一次、分別統計就夠了。
: 但SQL語法我只能寫成4次的table scan,像這樣
: SELECT(
: SELECT COUNT(*)
: FROM [Test]
: WHERE [Test].[Score] >= 90 && [Test] <= 100) AS [Up90Count],
: SELECT COUNT(*)
: FROM [Test]
: WHERE [Test].[Score] >= 80 && [Test] < 90) AS [Up80Count],
: (略)
: 這樣是跑4個table scan。
: 當然可以把Score加Index,但因為這邊舉的只是最簡單的例子。
: 有時情況並不能把所有條件參數都Index。