兩表關聯查詢,主表 SEOrder 內碼重複時,只在第一行顯示主表欄位,其餘行留空。使用 ROW_NUMBER() OVER (PARTITION BY 內碼 ORDER BY 內碼) 標記行號,配合 CASE WHEN 控制顯示。
SELECT
t2.出庫單,
CASE WHEN t2.RN = 1 THEN t1.內碼 ELSE '' END AS 內碼,
CASE WHEN t2.RN = 1 THEN t1.編號 ELSE '' END AS 編號,
CASE WHEN t2.RN = 1 THEN t1.客戶 ELSE '' END AS 客戶,
CASE WHEN t2.RN = 1 THEN t1.日期 ELSE '' END AS 日期
FROM (
SELECT 出庫單, 內碼,
ROW_NUMBER() OVER (PARTITION BY 內碼 ORDER BY 內碼) AS RN
FROM icstockbill
) t2
JOIN (
SELECT 內碼, 編號, 客戶, 日期
FROM SEOrder
) t1 ON t2.FInterID = t1.FInterID
ORDER BY t2.內碼, t2.RN;
若為舊版 MySQL,需用變數模擬:
SET @rn=0, @prev='';
SELECT 出庫單,
IF(@prev=內碼, @rn:=@rn+1, @rn:=1) AS RN,
@prev:=內碼 AS 內碼,
編號, 客戶, 日期
FROM (...) t
ORDER BY 內碼;
若報表工具支援分組(如 Crystal Reports、FastReport),直接設定 分組標題顯示主表欄位,詳細區隱藏重複值,SQL 只需單純 JOIN。