程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL按type計算行數的三種方法

SQL按type計算行數的三種方法

編輯:關於SqlServer

我有一個叫做TestTable的表,它有一個字段,Type Varchar(5)。表中的數據如下:

Type

A

B

A

C

A

B

所以在這個表中這個單獨的字段裡有六條記錄。請幫助我寫一個查詢獲得下面的結果:

A B C

3 2 1

換句話說我想獲得單獨的Type字段數據和它們的數量。

Rudy Limeback:

有三種方式可以實現它:

select ( select count(*)
  from TestTable
  where Type = 'A' ) as A
  , ( select count(*)
  from TestTable
  where Type = 'B' ) as B
  , ( select count(*)
  from TestTable
  where Type = 'C' ) as C

在有些數據庫裡這第一個查詢確實可以運行,但是它不是標准的SQL,因為它缺少了FROM條件。添加上雙重FROM(或者其他任何一行的表)。

select sum( case when Type = 'A'
  then 1 else 0 end ) as A
  , sum( case when Type = 'B'
  then 1 else 0 end ) as B
  , sum( case when Type = 'C'
  then 1 else 0 end ) as C
  from TestTable

第二個查詢確實可以得出你想要的,但是就像第一個查詢一樣,如果你發覺需要增加另一個Type,維護起來很麻煩。

select Type
  , count(*)
  from TestTable
  group
  by Type

第三個查詢是最好的。不只是它一看就很容易理解,而且當添加新的Types時它還不需要維護。此外,它認為這個表達式不應該在數據庫層處理。

順便,因為你的表只有一列,而它具有重復的值,這個列不能作為主鍵,因此這個表沒有主鍵。有人會說它因此不是一個“真正”的表,是個包。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved