2012-05-11 2 views
1

내가 트랜잭션 테이블을 조회하는 보고서가 범위를 통해 선택 기록, 나는 테이블 아래의 단순화 : 테이블의Crystal Reports를 텍스트

CREATE TABLE [dbo].[NL_Trans](
    [NT_PRIMARY] [int] NOT NULL, 
    [NT_CODE] [varchar][20] NOT NULL, 
    [NT_CAT1] [varchar](6) NOT NULL, 
    [NT_CAT2] [varchar](6) NOT NULL, 
) 

데이터 같다 :

NT_PRIMARY -- NT_CODE --- NT_CAT1 --- NT_CAT2 
--------------------------------------------- 
     1  AB100   123   234 
     2  AB200   124   234 
     3  AB300   125   235 
     4  AB400   126   235 

테이블에 몇 년 데이터가 있고 8 NT_CAT 필드가 있습니다. 이들은 varchar의으로 저장된 숫자입니다.

쿼리를 제한하는 범주 목록이 많지만이를 텍스트 범위로 제한하는 방법을 찾을 수 없습니다. 은 지금까지 나는 시도했다 :

{NL_Trans.NT_CAT1} IN "124" to "125" 

AND 

(CDbl ({NL_Trans.NT_CAT1}) IN 124 to 125)) 

어느 것도 어떤 결과를 반환한다.

어떤 경우에는 범위가 100 개가 넘기 때문에 많은 수의 OR 문을 사용할 수 없습니다. 수천 줄이 필요합니다.

누구나 작동 할 수있는 대안을 제시하고 (가능하면 Catagories 색인을 활용할 수 있습니까?) 위의 설명 중 하나가 효과가없는 이유를 설명해주십시오.

답변

1

우선 Crystal가 "5" in "1" to "10"과 같은 구문을 평가할 수는 없습니다. 나는이 비교를위한 기초를 모른다, 그러나 나는 그것이 선도 숫자의 ascii 값 또는 그와 비슷한 것을 기반으로한다고 생각할 것이다.

두 배로 변환하면 이됩니다. work ... NT_CAT 필드에 숫자가 아닌 문자를 사용할 수 있습니까? 당신은 당신의 레코드 선택 수식이 뭔가를 시도하고 당신이 더 운이 있는지 확인해야합니다

if not(isnull({NL_TRANS.NT_CAT1})) and isnumeric({NL_TRANS.NT_CAT1}) then cdbl({NL_TRANS.NT_CAT1}) in 124 to 125

이의 단점은 크리스탈이에서 처리 할 수있는 WHERE 절에이를 추가 할 것입니다 SQL Server에서는 로컬 컴퓨터에서 선택을 수행합니다. 이 성능 저하를 피하기 위해 Crystal에서 문자열 - 숫자 변환을 수행 할 SQL 식을 만들 수 있습니다.나는 시도하고 그것을 내 크리스탈 코드를 변환하지 않을거야 그래서 TSQL을 사용하지 않는,하지만 당신은 SQL 식을 만든 경우 {%는 ConvertCAT1ToNumeric은} 당신은 당신의 선택 수식이를 사용할 수 있습니다

not(isnull({%ConvertCAT1ToNumeric})) and {%ConvertCAT1ToNumeric} in 124 to 125

행운을 비네.

+0

마지막으로 테스트 덕분에 문제가 발견되었습니다. 괄호가있는 기본 서식 오류 였기 때문에 이제는 'Cdbl IN Range'메서드가 작동합니다. – bendataclear

0

시도해보십시오.

그게 당신이 "124"의 범위 ** {NL_Trans.NT_CAT1}을 찾고 수 있습니다 .. 기준 유형 중 하나를 "125" ** 및

이고 ** thoose 줄을 제거 이것을 선택 기준에 넣으십시오.하지만 먼저 숫자 범위 수식에 대해 다른 필드를 선택하고 전체 수식을 복사 한 다음 새 조건을 만드십시오. 필드의 이름을 적절하게 바꾸고 보고서를 실행하십시오. 나는이 숫자를 (CDbl에는 범위 수있는 공식이다 생각) (125 124 CDbl에는 ({NL_Trans.NT_CAT1}))

을 :

원래 (당신이 한 1 더미 기준을 삭제하는 것을 잊지 그나마) ({NL_Trans.NT_CAT1}) (124에서 125 사이))

관련 문제