跳至內容
Astera Technology

已排報表行,串成的工作路徑為何仍錯序?

合計輸入次序與輸出組次序分開訂。

下載完整個案資料及參考答案 ↓

準備報表輸入

本例明訂位置一 entry、二 review、三 finish。外層 ORDER BY 排組行,不排餵入 group_concat 的值。須在合計內按 position、id 排,否則輸入次序沒保證。

以下記錄及報表規則均為原創假設。在新 SQLite 測試資料庫重做建表,預覽包含此小型例子每張表。

假設輸入:steps
編號組代碼步驟位置原標籤
1A2review
2A1entry
3A3finish
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE steps(id INTEGER PRIMARY KEY,group_code TEXT NOT NULL,position INTEGER NOT NULL,label TEXT NOT NULL); INSERT INTO steps VALUES(1,'A',2,'review'),(2,'A',1,'entry'),(3,'A',3,'finish');

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT group_code,group_concat(label,',') AS step_order FROM steps GROUP BY group_code ORDER BY group_code;
錯誤查詢的逐行結果
組代碼步驟次序
Areview,entry,finish
下載可編輯 CSV ↓
更正 SELECT
SELECT group_code,group_concat(label,',' ORDER BY position,id) AS step_order FROM steps GROUP BY group_code ORDER BY group_code;
更正查詢的逐行結果
組代碼步驟次序
Aentry,review,finish
下載可編輯 CSV ↓

本次錯誤實際得 review,entry,finish,更正為 entry,review,finish。錯次序是此執行觀察,不保證每個 SQLite 計劃相同。

用新副本測邊界

加位置四 archive,更正匯出便在 finish 後。

另開新資料庫重做原建表,才套下列改動及更正查詢。空結果在表內用已標明空結果文字表示,不是假資料行。

邊界改動及更正查詢
INSERT INTO steps VALUES(4,'A',4,'archive');
SELECT group_code,group_concat(label,',' ORDER BY position,id) AS step_order FROM steps GROUP BY group_code ORDER BY group_code;
邊界查詢的逐行結果
組代碼步驟次序
Aentry,review,finish,archive
下載可編輯 CSV ↓

按 group_code 排組,是否也定組內步驟次序?

查看參考答案

不是,合計輸入要另按位置排,邊界文字為 entry,review,finish,archive。

相關資源