首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 條件聚合實現行列轉換(PIVOT)完整示例

     編輯:程式設計綜合問答

業務場景

原始表記錄運單明細、運單編號、付款方式(1/2)、運費。需按運單編號分組,將付款方式轉為列,顯示各方式運費小計及總計。

測試數據構建

WITH table1(明細, 單號, 方式, 運費) AS (
  SELECT 'L11','Y05',1,30 UNION ALL
  SELECT 'L12','Y05',2,40 UNION ALL
  SELECT 'L13','Y05',2,30 UNION ALL
  SELECT 'L14','Y06',1,50 UNION ALL
  SELECT 'L15','Y06',1,60 UNION ALL
  SELECT 'L16','Y06',2,40
)

PIVOT 查詢語句

SELECT
  單號,
  [1] AS 方式1運費,
  [2] AS 方式2運費,
  ISNULL([1],0) + ISNULL([2],0) AS 總運費
FROM (
  SELECT 單號, 方式, 運費 FROM table1
) t
PIVOT (
  SUM(運費) FOR 方式 IN ([1], [2])
) p;

結果集

單號  方式1運費  方式2運費  總運費
Y05   30         70         100
Y06   110        40         150

關鍵點解析

  • 聚合函數: SUM、COUNT、AVG 皆可,視業務而定。
  • IN 列表: 必須顯式列出所有要轉為列的值([1], [2]),動態列需動態 SQL。
  • NULL 處理: 無數據的組合顯示 NULL,外層用 ISNULL/COALESCE 轉 0。

動態列擴展(進階)

若付款方式不固定,需構建動態 SQL 字串執行,或在應用層完成行列轉換。

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