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

SQL 合併顯示:相同內碼只顯示第一行,其餘留白

     編輯:程式設計綜合問答

兩表關聯查詢,主表 SEOrder 內碼重複時,只在第一行顯示主表欄位,其餘行留空。使用 ROW_NUMBER() OVER (PARTITION BY 內碼 ORDER BY 內碼) 標記行號,配合 CASE WHEN 控制顯示。

SQL Server 寫法

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 8.0+ / PostgreSQL 同樣支援窗口函數

若為舊版 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。

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