テーブル内の単一の行には、整数値> = 1の列がありますが、列が何回も選択されていなければなりません。したがって、列に '2'がある場合は、selectクエリで単一行を2回返すようにしたいと思います。PostgreSQL:単列xの量を選択してください
これはどのように達成できますか?
テーブル内の単一の行には、整数値> = 1の列がありますが、列が何回も選択されていなければなりません。したがって、列に '2'がある場合は、selectクエリで単一行を2回返すようにしたいと思います。PostgreSQL:単列xの量を選択してください
これはどのように達成できますか?
再帰的なクエリで実行するには、 the postgresql docsの例を参照してください。
CREATE TABLE numbers
(
num INT NOT NULL
, CONSTRAINT numbers_pk PRIMARY KEY (num)
);
、あなたが1から始まる、必要な数の数字を移入:あなたはこのような数字のちょうどいっぱいあるテーブルを作ることができ
WITH RECURSIVE t(cnt, id, field2, field3) AS (
SELECT 1, id, field2, field3
FROM foo
UNION ALL
SELECT t.cnt+1, t.id, t.field2, t.field3
FROM t, foo f
WHERE t.id = f.id and t.cnt < f.repeat_cnt
)
SELECT id, field2, field3 FROM t;
8.4のみ、まだベータ版です。 – rfusca
よう
何か:
INSERT INTO numbers VALUES(1);
INSERT INTO numbers VALUES(2);
INSERT INTO numbers VALUES(3);
...
次に、 "repeat_c"という列に基づいて繰り返す "mydata"テーブルがある場合あなたがそうするようにそれを照会するでしょう:
SELECT mydata.*
FROM mydata
JOIN numbers
ON numbers.num <= mydata.repeat_count
WHERE ...
もちろん、最大反復カウントを知り、数字テーブルを高くする必要があります。
なぜあなたはこの考えをしたいのか分かりません。ケアを共有する?
誰かがこれを読んでいたら、なぜか分かち合いましょう。議論したくないだけでなく、自分の啓発のために好奇心が強い。 – Evan
CREATE TABLE testy (a int,b text);
INSERT INTO testy VALUES (3,'test');
SELECT testy.*,generate_series(1,a) from testy; --returns 3 rows
例として、整数列がカテゴリごとのサンプル数を定義するランダムサンプルを生成するためにこれを正確に必要とします。 – hfs
あなたがそのようなことをしたいと思う理由を知っているが、...しないでくださいは、適切に複製されたか、それは常に1行のみであるべきであるテーブル内の複数の行がありますか? –
また、このアプローチを使用している理由についてもお知らせください。よりクリーンなソリューションがあるかもしれません。 –
これは非常に奇妙な要件です。このフォーマットが必要な従来のアプリを扱っていますか?しかし、select文の制御が渡されている場合、代わりにアプリケーションコードでループを使用することはできませんか? – MkV