發表文章

🧾SQL 教學:如何列出資料表欄位的「不同值」— 新手也能懂的 DISTINCT 與 GROUP BY

1. 這篇文章要解決什麼問題? 你在資料庫裡有一張資料表(例如測試資料、報表資料、或任何紀錄表),其中有一個欄位叫做 RAWFILE ,它通常代表「資料從哪個檔案匯入」或「來源檔名」。 你想做的事情很常見: 把 RAWFILE 欄位中出現過的「不同值」全部列出來   也就是:不要看到重複的檔名,只要每個檔名列一次。 這個需求通常用在: 找出有哪些來源檔案有被匯入 檢查資料異常時,快速定位「哪些檔案」可能有問題 做資料清理前先確認來源分佈 寫 ETL / Loader 時做追蹤與稽核(audit) 2. 先用白話理解:「不同值」是什麼? 假設 RAWFILE 欄位的資料長得像這樣: RAWFILE fileA.xlsx fileA.xlsx fileB.xlsx fileC.xlsx fileB.xlsx 你要的輸出是: fileA.xlsx fileB.xlsx fileC.xlsx 也就是 去重複後的清單 。 3. 最常用解法:DISTINCT(去重複) 在 SQL 裡,最直覺的作法是用 DISTINCT 。 它的意思就是: 只顯示不重複的值 ✅ 示範 SQL: SELECT DISTINCT t.RAWFILE FROM dbo.FT_TEST_INFO AS t WHERE t.RAWFILE IS NOT NULL ORDER BY t.RAWFILE; 你...

🧠 APS 系統是怎麼判斷訂單能不能成交?工程師帶你看懂「成交率、Pull-in / Extra、續留次數」

一、什麼是 APS(Advanced Planning System)? 在現代製造業中,例如面板、電子、半導體產業,每天都會有大量訂單需求: 客戶要提前交貨 新訂單突然增加 原本排好的生產計畫被打亂 如果只靠人工排程,幾乎不可能完成。 因此企業會使用一種系統: APS(Advanced Planning System) APS 的工作是: 根據「產能、物料、設備、需求」去計算 哪些訂單可以完成、哪些不行。 簡單來說: 需求 ↓ APS 排程計算 ↓ 可成交 / 不可成交 二、APS 系統判斷成交的三個關鍵因素 當 APS 在計算一筆訂單能不能成交時,通常會檢查三件事情: 1️⃣ 前段製程(Front Process) 例如: TFT 製程 Wafer 製程 Panel 製程 問題可能是: 產能不夠 機台滿載 2️⃣ 後段製程(LCM / Assembly) 例如: 模組組裝 測試 包裝 可能問題: 模組產能不足 排線衝突 3️⃣ 物料(Material) 這其實是最常見的問題。 例如: Driver IC PCBA Backlight Polarizer 只要其中一種材料缺料,訂單就可能無法完成。 三、什麼是 Pull-in 訂單? Pull-in 的意思是: 客戶希望「提前交貨」。 例如: 原本訂單是: 交貨時間:第 12 週 客戶突然說: 我要第 10 週交貨 這就是 Pull-in 。 在系統中會標記為: Order Type = Pull-in APS 必須重新計算: 產能 物料 排程 看看能不能提前生產。 四、什麼是 Extra ...

🧾Oracle SQL Developer 出現 SP2-0552 怎麼辦?新手也懂的「綁定變數未宣告」排查與解法(含常用去重查詢)

一、你遇到的問題其實很常見:SP2-0552 是什麼? 如果你在 Oracle SQL Developer 執行 SQL 時看到這個錯誤: SP2-0552: 連結變數 "XXXX" 未宣告 這通常代表一件事: 你在 SQL 裡用了「綁定變數」(Bind Variable),但工具端沒有先宣告它。 這不是你的資料表壞了,也不是 SQL 寫錯了,而是「執行環境」在提醒你: 我不知道 :xxxx 是什麼,因為你沒有先定義它。 二、為什麼會這樣?關鍵差異:Run Statement vs Run Script Oracle SQL Developer 有兩種常見執行方式: 1) Run Statement(通常是 Ctrl + Enter) 偏向「直接執行 SQL」 有時會用 SQL Developer 自己的方式處理參數 2) Run Script(通常是 F5) 會走 SQL*Plus 風格的腳本執行器 這種模式下, : 開頭的變數 一定要先宣告 很多人就是因為按了 F5 ,就突然遇到 SP2-0552。 三、什麼是 Bind Variable?新手版解釋 想像你寫一段 SQL: 你想查「某個版本」的資料 但版本字串每次都不同 你不想每次都改 SQL(也比較安全) 所以你會寫成「先留一個洞」: 這個洞叫做 參數 / 綁定變數 讓程式或工具在執行時再把值塞進去 四、SP2-0552 的三種實用解法 下面用一個「查訂單資料」的假想情境來示範 ✅ 解法 A:用 Run Script(F5)時,先宣告變數(最正統) 如果你的 SQL 裡像這樣寫: SELECT * FROM SALES_ORDERS WHERE ORDER_GROUP = :gr...

🐬Spotfire 自動報表腳本常見錯誤解析:IronPython 變數未定義與 SQL 查詢結果不一致的完整排查指南

一、問題背景:Spotfire 自動報表腳本出現奇怪錯誤 在企業 BI 系統中,許多工程師會使用 Spotfire + IronPython 來建立自動化報表,例如: 每週自動匯出 CSV 每月產生 PDF 報表 定期從資料庫抓取資料 例如典型流程: 透過 SQL 從資料庫抓取資料 更新 Spotfire Data Table 依不同產品分類輸出報表 匯出 CSV 或 PDF 然而在實務中,常常會遇到這些問題: 常見錯誤 1️⃣ SQL 在 SQL Server 有資料,但 Spotfire 查不到 2️⃣ IronPython 出現變數未定義錯誤 3️⃣ Data Table 不存在 4️⃣ 自動化報表腳本中途停止 例如錯誤訊息: IronPython.Runtime.UnboundNameException: name 'ReportList' is not defined 或 The table named 'CHECK_TABLE' does not exist 這些問題其實非常常見。 二、典型自動報表腳本架構 以下是一個簡化版的 Spotfire 自動報表流程(已重新設計範例程式)。 Step 1:產生查詢日期 from datetime import datetime , timedelta today = datetime . today() start_date = today - timedelta ( days = 7 ) end_date = today start_str = start_date . strftime( "%Y-%m-%d" ) end_str = end_date . strftime( "%Y-%m-%d" ) Step 2:建立 SQL 查詢 sql_query = """ SELECT product_id, batch_...