Files
thinkyu/報到系統/SQL/初始化SignUp序號.sql
T
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

69 lines
1.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =====================================================
-- 初始化 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;