일련 번호가있는 테이블에서 각 반복 그룹의 각 멤버를 장식하고 싶습니다. 그래서 위해 :반복 그룹의 각 멤버를 순차 번호로 장식하는 SQL
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
나는 체계와 결합 그래서 FK
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
가 반복 그룹을 만들어 내 결과에서 볼 것입니다. 반복 그룹에서 최대 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으로 끝납니다.
는데이비드
어떤 데이터베이스를 사용하고 있습니까? (MySQL, Oracle SQLServer 등) – Andomar
위의 ANSI SQL이 선호하지만 concat 함수는 킬러입니다. 테스트에 H2 사용. – Olddave
레코드를 동일한 그룹으로 만드는 것에 대해 정교하게 (질문 편집) 할 수 있습니까? 나는 그 예에서 그것을 이해하지 못했습니다. (예제 8에서 올바른 id 8입니까?) –