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

MS SQL 動態組合多表欄位:依 TB5 排序產生所有排列組合

     編輯:程式設計綜合問答

需求

根據 TB5 定義的表名與順序(Lat),從各表取一個 Code 組合成字串,輸出所有可能組合。表結構與資料如題所示。

解法:動態 SQL + 遞歸 CTE

WITH OrderedTables AS (
    SELECT TB5Code, Lat, ROW_NUMBER() OVER (ORDER BY Lat) AS rn
    FROM TB5
),
Combinations AS (
    -- 錨點:第一張表
    SELECT CAST(TB1Code AS VARCHAR(MAX)) AS combo, 1 AS lvl
    FROM TB1
    WHERE EXISTS (SELECT 1 FROM OrderedTables WHERE rn=1 AND TB5Code='TB1')
    
    UNION ALL
    
    -- 遞歸:逐級 JOIN 下一張表
    SELECT CAST(c.combo + t.Code AS VARCHAR(MAX)), c.lvl + 1
    FROM Combinations c
    JOIN OrderedTables ot ON ot.rn = c.lvl + 1
    JOIN (
        SELECT 'TB1' AS tb, TB1Code AS Code FROM TB1
        UNION ALL SELECT 'TB2', TB2Code FROM TB2
        UNION ALL SELECT 'TB3', TB3Code FROM TB3
        UNION ALL SELECT 'TB4', TB4Code FROM TB4
    ) t ON t.tb = ot.TB5Code
    WHERE c.lvl < (SELECT MAX(rn) FROM OrderedTables)
)
SELECT combo FROM Combinations
WHERE lvl = (SELECT MAX(rn) FROM OrderedTables)
ORDER BY combo;

說明

  • OrderedTables 依 Lat 排序並編號。
  • 遞歸 CTE 逐級串接,最終層級等於表數量時輸出完整組合。
  • 若表數量或資料行動態變更,無需修改查詢邏輯。

此法適用於 SQL Server 2008 R2 及以上版本。

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