首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

經典 T-SQL 查詢排序案例三則:輪詢顯示、每日流水號、出現次數統計

     編輯:關於SqlServer

案例一:多地區輪詢顯示(每區一筆循環)

需求:依地區排序,但每個地區只顯示一筆,然後循環下一輪,直到資料耗盡。

SELECT NAME, LOCAL, AGE,
       XH = (SELECT COUNT(*) FROM LIST A WHERE A.LOCAL = B.LOCAL AND A.NAME < B.NAME)
FROM LIST B
ORDER BY XH, LOCAL;

原理:計算同地區中名字排序前的筆數作為輪詢順序。

案例二:同一人同一天的外出流水號

需求:記錄某人在某天的第幾次外出。

SELECT A.NAME, A.DT,
       (SELECT COUNT(NAME) FROM TABLENAME
        WHERE NAME = A.NAME
          AND YEAR(DT) = YEAR(A.DT)
          AND MONTH(DT) = MONTH(A.DT)
          AND DAY(DT) = DAY(A.DT)
          AND DT <= A.DT) AS NCOUNT
FROM TABLENAME A
ORDER BY A.DT;

案例三:依 ID 順序統計名稱出現次數

需求:ID 為主鍵,輸出該名稱截至當前 ID 的累計出現次數。

SELECT ID, 名稱,
       (SELECT COUNT(ID) FROM TABLE1 WHERE 名稱 = AAA.名稱 AND ID <= AAA.ID) AS 次數
FROM TABLE1 AAA;

核心模式

三者皆屬相關子查詢計數模式:外層逐列掃描,內層統計滿足條件的歷史筆數。適用於中小資料量;大數據量建議改用視窗函數 ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved