テーブル内の各繰り返しグループの各メンバーを連番で飾りたいと思います。だから:
id fk scheme code
1 23 2 1234
2 23 2 6666
3 23 2 9876
4 24 2 3421
5 24 5 erty
6 24 7 wert
7 25 2 3490
8 25 2 2389
9 25 5 erfg
私は私の結果で見るだろう
23|2|1 1234
23|2|2 6666
23|2|3 9876
24|2|1 3421
24|5|1 erty
24|7|1 wert
25|2|1 3490
25|2|2 2389
25|5|1 erfg
fk を scheme と組み合わせると、繰り返しグループが作成されます。繰り返しグループに最大 5 つしかないことはわかっていますが、テスト クエリでは 3 つしか許可されません。連続した行番号は装飾として機能しません。これらはキャッシュ ルックアップに使用されるため、1 または 2 または 3 のみにする必要があります。
H2 Db SQL構文を使用して思いついたSQLは次のとおりです。
SELECT "identifier", "code" FROM (
SELECT CASE WHEN s1."code" IS NOT NULL AND s2."code" IS NULL AND s3."code" IS NULL
THEN s1."ident"||'|1'
WHEN s1."code" IS NOT NULL AND s2."code" IS NOT NULL AND s3."code" IS NULL
THEN s2."ident"||'|2'
WHEN s1."code" IS NOT NULL AND s2."code" IS NOT NULL AND s3."code" IS NOT NULL
THEN s3."ident"||'|3' END AS "identifier", s1."code"
FROM (select "ii"."fk", "ii"."scheme", "ii"."fk"||'|'||"ii"."scheme" AS "ident", "code"
from "inidentifier" "ii" group by "fk", "scheme", "code") s1
LEFT OUTER JOIN
(select "ii"."fk", "ii"."scheme", "ii"."fk"||'|'||"ii"."scheme" AS "ident", "code"
from "inidentifier" "ii" group by "fk", "scheme", "code") s2 ON s1."ident" = s2."ident"
AND s1."code" < s2."code"
LEFT OUTER JOIN
(select "ii"."fk", "ii"."scheme", "ii"."fk"||'|'||"ii"."scheme" AS "ident", "code"
from "inidentifier" "ii" group by "fk", "scheme", "code") s3 ON s1."ident" = s2."ident"
AND s2."ident" = s3."ident" AND s1."code" < s2."code" AND s2."code" < s3."code"
ORDER BY "identifier", s1."code") "cache"
WHERE "cache"."identifier" IS NOT NULL
私が抱えている問題は、最後に |3 が生成されないことです。上記の例のデータでは、1 である必要があります。23|2|2 9876 および 23|2|2 6666 になります。別のアプローチでしょうか?
前もって感謝します
デビッド