69 lines
1.6 KiB
SQL
69 lines
1.6 KiB
SQL
-- =====================================================
|
||
-- 初始化 SignUp 表的序號 (SeqNo)
|
||
-- 用途:為現有的參加人員記錄補充序號
|
||
-- 說明:按活動(CourseID)和ID排序,為每個活動內的參加人員自動編號
|
||
-- =====================================================
|
||
|
||
-- 方式一:使用 ROW_NUMBER() - 推薦(支援 SQL Server 2005+)
|
||
-- 此方式會為每個活動內的記錄按 ID 順序編號
|
||
|
||
BEGIN TRANSACTION;
|
||
|
||
UPDATE SignUp
|
||
SET SeqNo = rn.RowNum
|
||
FROM SignUp su
|
||
INNER JOIN (
|
||
SELECT
|
||
ID,
|
||
ROW_NUMBER() OVER (PARTITION BY CourseID ORDER BY ID ASC) AS RowNum
|
||
FROM SignUp
|
||
) rn ON su.ID = rn.ID
|
||
WHERE su.SeqNo = 0 OR su.SeqNo IS NULL;
|
||
|
||
-- 顯示更新結果
|
||
SELECT '序號更新完成' AS [操作結果];
|
||
SELECT CourseID, COUNT(*) AS [人數], MIN(SeqNo) AS [最小序號], MAX(SeqNo) AS [最大序號]
|
||
FROM SignUp
|
||
WHERE SeqNo > 0
|
||
GROUP BY CourseID
|
||
ORDER BY CourseID;
|
||
|
||
COMMIT TRANSACTION;
|
||
|
||
-- =====================================================
|
||
-- 驗證結果
|
||
-- =====================================================
|
||
|
||
-- 查看更新後的資料
|
||
SELECT
|
||
ID,
|
||
CourseID,
|
||
SeqNo,
|
||
Name,
|
||
Mobile,
|
||
CheckInTime,
|
||
CheckOutTime
|
||
FROM SignUp
|
||
ORDER BY CourseID ASC, SeqNo ASC;
|
||
|
||
-- 檢查是否有未設定序號的記錄
|
||
SELECT
|
||
ID,
|
||
CourseID,
|
||
Name,
|
||
Mobile
|
||
FROM SignUp
|
||
WHERE SeqNo = 0 OR SeqNo IS NULL
|
||
ORDER BY CourseID, ID;
|
||
|
||
-- 檢查序號是否重複
|
||
SELECT
|
||
CourseID,
|
||
SeqNo,
|
||
COUNT(*) AS [重複次數]
|
||
FROM SignUp
|
||
WHERE SeqNo > 0
|
||
GROUP BY CourseID, SeqNo
|
||
HAVING COUNT(*) > 1
|
||
ORDER BY CourseID, SeqNo;
|