準備報表輸入
本例明訂位置一 entry、二 review、三 finish。外層 ORDER BY 排組行,不排餵入 group_concat 的值。須在合計內按 position、id 排,否則輸入次序沒保證。
以下記錄及報表規則均為原創假設。在新 SQLite 測試資料庫重做建表,預覽包含此小型例子每張表。
| 編號 | 組代碼 | 步驟位置 | 原標籤 |
|---|---|---|---|
| 1 | A | 2 | review |
| 2 | A | 1 | entry |
| 3 | A | 3 | finish |
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 group_code,group_concat(label,',') AS step_order FROM steps GROUP BY group_code ORDER BY group_code;| 組代碼 | 步驟次序 |
|---|---|
| A | review,entry,finish |
SELECT group_code,group_concat(label,',' ORDER BY position,id) AS step_order FROM steps GROUP BY group_code ORDER BY group_code;| 組代碼 | 步驟次序 |
|---|---|
| A | entry,review,finish |
本次錯誤實際得 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;| 組代碼 | 步驟次序 |
|---|---|
| A | entry,review,finish,archive |
按 group_code 排組,是否也定組內步驟次序?
查看參考答案
不是,合計輸入要另按位置排,邊界文字為 entry,review,finish,archive。