2012-03-07 2 views
0

실제로이 필드는 큰 긴 문자열 인 '1'이 아닙니다. 여기 내 목표는 C++ 프로그램에서이 데이터를 계층 적 개체로 구문 분석하는 것입니다. 그래서 쿼리를 가능한 한 빨리 실행하면서 객체에 채울 수있는 최소 데이터를 반환해야합니다.어떻게 '이전에 인쇄 된 행부터 값이 변경된 경우에만 인쇄'라고 말합니까?

다음은 상상력으로이 목표를 성취 할 수있는 방법이지만, 진정한 목표를 달성하는 간단한 방법이 있다면 나는 모두 귀입니다.

내가 생각한 다른 것들 : 피벗 테이블을 고려해 보았지만 계층 구조의 각 계층에 5 개의 분기가있는 경우 데이터를 얻을 때까지 피벗 테이블에 3000 개 이상의 열이 있습니다.

은 계층화 된 머리글 필드별로 그룹화하고 이전에 인쇄 된 행과 동일한이 아닌 경우에만 필드를 그룹화하면서 2 개의 필드를 함께 연결 한 다음 listagg하고 싶습니다. 당신이 열을 알고있는 경우

하는
input 
tier1,tier2,tier3,tier4,tier5,data1,data2 
1  1  1  1  1  big tall 
1  1  1  1  1  big smelly 
1  1  1  1  2  gross tall 
1  1  1  2  1  flatulent exceptional 


desired output: 
1  1  1  1  1  big,tall big,smelly         
         2  gross,tall 
        2  1  flatulent,exceptional 
는 마지막 인쇄 행 이후 변경된 경우에만 필드를 인쇄

가상의 기능은, 우리가) (미친

select 
    crazy(tier1), 
    crazy(tier2), 
    crazy(tier3), 
    crazy(tier4), 
    crazy(tier5), 
    listagg(data1||data2, ' ') within group(?) 
    from table 
    group by tier1,tier2,tier3,tier4,tier5 

답변

0

를 호출합니다, 당신은 잠재적으로 사용할 수 있습니다 CTE (사용중인 SQL 버전에 따라 다름) 그게 작동하지 않는다면, 나는 코드에서 작업하는 것을 제안 할 것이다. SQL은 프로 시저 및 함수가 아닌 SET 기반 논리를위한 것입니다 (지원 되더라도). 모든 행에서 5 또는 6 개의 함수를 실행하는 성능은 코드에서 분석을 실행하는 것과 비교할 때 끔찍할 것입니다