如何使用sqlite3數據庫以這種格式構建查詢?如何獲得每行固定數量的結果?
CREATE TABLE sample (integer foo);
INSERT INTO sample VALUES (1);
...
INSERT INTO sample VALUES (10);
格式結果
1,2,3
4,5,6
7,8,9
10
如何使用sqlite3數據庫以這種格式構建查詢?如何獲得每行固定數量的結果?
CREATE TABLE sample (integer foo);
INSERT INTO sample VALUES (1);
...
INSERT INTO sample VALUES (10);
格式結果
1,2,3
4,5,6
7,8,9
10
您將有一些標準添加到組的他們:
CREATE TABLE sample (integer foo, char(1) bar);
INSERT INTO sample VALUES
(1, 'a'), (2, 'a'), (3, 'a'), (4, 'b'), (5, 'b'), (6, 'b'), (7, 'c') ...;
SELECT GROUP_CONCAT(foo ORDER BY foo, ',')
FROM sample
GROUP BY bar
編輯:
試試這個:
select group_concat(foo) from (
select s1.foo, (count(*) - 1)/3 grp from sample s1
join sample s2 on s1.rowid >= s2.rowid
group by s1.rowid
) final
group by grp
這可能不是最好的解決辦法(並具有一定優勢的情況下---如果你有一個3值不爲空),並且大概可以放入一個查詢中,但我需要RowId加入。它應該做的伎倆,雖然:
CREATE TEMP TABLE split1 (foo1 int);
CREATE TEMP TABLE split2 (foo2 int);
CREATE TEMP TABLE split3 (foo3 int);
INSERT INTO split1
SELECT foo FROM sample WHERE foo % 3 = 1 ORDER BY foo
INSERT INTO split2
SELECT foo FROM sample WHERE foo % 3 = 2 ORDER BY foo
INSERT INTO split3
SELECT foo FROM sample WHERE foo % 3 = 0 ORDER BY foo
SELECT
CASE
WHEN foo2 IS NULL THEN foo1
WHEN foo3 IS NULL THEN foo1||','||foo2
ELSE foo1||','||foo2||','||foo3
END
FROM split1
LEFT JOIN split2
ON split1.RowId = split2.RowId
LEFT JOIN split3
ON split2.RowId = split3.RowId
@MostyMostacho好的,我認爲現在應該是好的。 – 2012-03-27 03:35:44
我相信這種方式會更多perfomartico在代碼循環中實現這個邏輯。我可以下令簡化電話。 非常感謝你 有應該退出一個查詢「魔術」的線這個任務是不是? – 2012-03-27 03:54:24
我不能在一個視圖:( – 2012-03-27 03:59:15
這是一個很好的選擇,我在這種情況下使用的實際數據不會有太大的變化,但如果一個被刪除,我將不得不實施一個邏輯單元來爲沒有三個成員並且不是最新的組包含新值。 但謝謝你的另一種觀點:) – 2012-03-27 03:50:00
我又增加了一個答案。它應該在刪除時保留下來,因爲它是動態計算的 – 2012-03-27 04:16:02
哇!太好了! :) 謝謝你,你保存了一天。 O / – 2012-03-27 04:21:31