1

버전 Advantage Database Server를 사용하고 있습니다. 10.10.0.49.ADS가 id 변수 변경시 행 번호를 재설정하면 false가 반환됩니다.

id 변경시 재설정되는 행 번호를 만들려고합니다.

나는 MySQL에서 비슷한 코드를 테스트했으며 작동한다.

Advantage에서는 변수가 모두 예상 값이 아닌 'false'를 반환합니다.

ADS Architect에서이 테스트 코드를 만들었습니다.

Item | row_num | ids |id |descrip 
-----|---------|------|---|-------- 
1 |FALSE |FALSE |1 |abc 
2 |FALSE |FALSE |1 |xyz 
3 |FALSE |FALSE |1 |hij 
4 |FALSE |FALSE |2 |abc 
5 |FALSE |FALSE |2 |hij 

를 반환 ... 내가
Item | row_num | ids |id |descrip 
-----|---------|------|---|-------- 
1 |1  |1  |1 |abc 
2 |2  |1  |1 |xyz 
3 |3  |1  |1 |hij 
4 |1  |2  |2 |abc 
5 |2  |2  |2 |hij 

Over

를 기다리고 있었다

drop table test; 

create table test (id varchar(5),descrip varchar(10)); 

insert into test (id,descrip) values ('1','abc'); 
insert into test (id,descrip) values ('1','xyz'); 
insert into test (id,descrip) values ('1','hij'); 
insert into test (id,descrip) values ('2','abc'); 
insert into test (id,descrip) values ('2','hij'); 

set @ids = ''; 
set @row_num = 0; 

select 
@row_num = case when @ids = id then @row_num + 1 else 1 end AS row_num 
,@ids = id as ids 
,id 
,descrip 
from 
test 
order by 
id 

... .. Partition By은 최대한 멀리 볼 수 ADS 지원하지 않습니다.

답변

0

SELECT 문 내의 변수에 값을 할당하는 것은 ADS에서 작동하지 않습니다.

= 부호가 비교 연산자로 대신 해석되므로 BOOL 결과를 얻습니다.

는 지금까지 내가 당신 자신이 커서 사용하여 윈도우 함수 구현 알고 (성능면에서 최고의 솔루션이 아닐 수도 있지만 작동)로 :

DECLARE @id VARCHAR(5); 
DECLARE @rn INTEGER; 
DECLARE @c CURSOR AS SELECT item, id FROM #test2 ORDER BY id, descrip; 

TRY DROP TABLE #test; CATCH ALL END TRY; 

CREATE TABLE #test (item INTEGER, id VARCHAR(5), descrip VARCHAR(10)); 

INSERT INTO #test (item, id, descrip) VALUES (1, '1', 'abc'); 
INSERT INTO #test (item, id, descrip) VALUES (2, '1', 'xyz'); 
INSERT INTO #test (item, id, descrip) VALUES (3, '1', 'hij'); 
INSERT INTO #test (item, id, descrip) VALUES (4, '2', 'abc'); 
INSERT INTO #test (item, id, descrip) VALUES (5, '2', 'hij'); 

TRY DROP TABLE #test2; CATCH ALL END TRY; 

SELECT 
    tab.* 
    , 0  AS "rn" 
INTO #test2 
FROM #test tab; 

@id = ''; 
OPEN @c; 
WHILE FETCH @c DO 
    IF @id <> @c.id THEN 
    @id = @c.id; 
    @rn = 1; 
    ELSE 
    @rn = @rn + 1; 
    END IF; 

    UPDATE #test2 SET rn = @rn WHERE item = @c.item; 

END WHILE ; 
CLOSE @c; 

SELECT * FROM #test2 ORDER BY id, rn; 

참고 : 내가 주문한 귀하의 질문에 단지 id 대신 id, descrip에 의해 항목. 상황에 맞는 적절한 주문을 선택해야합니다.

+0

감사합니다. Jens, 그게 효과가 있습니다. 이제는 실제 데이터에 매핑해야합니다. 익숙하지 않은 방식이지만 까다로운 일일 수 있지만 큰 도움이되었습니다. –