2008-08-21 14 views
0

나는 SQL Server Reporting Services를 새로운 해요, 그리고 다음을 수행 할 수있는 가장 좋은 방법을 궁금 : MS보고 서비스에서 동적 하위 쿼리를 수행하는 가장 좋은 방법은 무엇입니까?

  • 하위 쿼리에서 속성을 얻기 위해 각 항목에 인기 ID의 목록을 가져

    • 쿼리 다른 테이블

    이상적으로는, 최종 보고서의 열은 다음과 같을 것이다 :

    [ID] [property1] [property2] [SELECT COUNT(*) 
               FROM AnotherTable 
               WHERE ForeignID=ID] 
    

    한 번에 모든 작업을 수행 할 수있는 거대한 SQL 쿼리를 작성하는 방법이있을 수 있지만이를 구획화하는 것이 좋습니다. 각 행에 대해 하위 쿼리를 수행하는 VB 함수를 작성하는 것이 좋습니다. 어떤 도움을 주셔서 감사합니다.

  • 답변

    2

    을 사용하는 것이 좋습니다. SubReport를 표 셀에 배치합니다. 여기

    select *, 
    (select count(*) from tbl2 t2 where t2.tbl1ID = t1.tbl1ID) as cnt 
    from tbl1 t1 
    

    은 (테이블 변수를 사용하여) 실행 가능한 버전입니다 :

    0

    간단한 방법이있다

    declare @tbl1 table 
    (
    tbl1ID int, 
    prop1 varchar(1), 
    prop2 varchar(2) 
    ) 
    
    declare @tbl2 table 
    (
    tbl2ID int, 
    tbl1ID int 
    ) 
    
    select *, 
    (select count(*) from @tbl2 t2 where t2.tbl1ID = t1.tbl1ID) as cnt 
    from @tbl1 t1 
    

    분명히 이것은 단지 원시 예이다 - 표준 규칙은 선택하지 마십시오처럼 적용 *, 등등 ... 21시 27분에서 8월 21일 '08


    UPDATE :
    @AlexCuse - 예, 성능에 전적으로 동의합니다.

    외부 조인을 사용하여 필기를 시작했지만 샘플 출력에서 ​​원하는 개수와 생각을 보았습니다. 테이블이 외부 조인이면 개수가 올바르게 반환되지 않습니다. 조인을하면 의도하지 않은 레코드가 곱해질 수 있습니다 (tbl1에서 1 항목이 tbl2 = 2에서 2 항목과 일치 함).

    그래서 실제로 쿼리가 반환해야하는 세부 사항으로 요약됩니다. 22시 7분에서 '08 년 8 월 21


    UPDATE :
    질문의 다른 부분에 대답하려면 - 비주얼 베이직 함수가 갈 수있는 방법을? 아닙니다. 이 간단한 일이 아닙니다.

    성능이 매우 좋지 않은 경우 반환 세트의 각 행에서 함수가 실행됩니다.

    쿼리의 다른 부분을 "분류"하려면 저장 프로 시저처럼 접근해야합니다. 임시 테이블을 작성하고 조회의 일부로 테이블에 결과를 삽입 한 다음 필요한 추가 조회를 수행하고 원래의 임시 테이블을 갱신 (또는 임시 테이블에 삽입)하십시오.

    0

    출력을 표시하는 방법에 따라 하위 보고서가 수행 할 수도 있고, ID, property1, property2를 그룹화하고 다른 테이블의 항목을 세부 항목으로 표시 할 수도 있습니다 (개수 만 표시하려면).

    뭔가

    select t1.ID, t1.property1, t1.property2, t2.somecol, t2.someothercol 
    from table t1 left join anothertable t2 on t1.ID = t2.ID 
    

    @Carlton Jenke

    처럼 난 당신이 외부 당신이 준 예에서는 상관 하위 쿼리보다 더 나은 공연에 참여 찾을 것이라 생각합니다. 각 행에 대해 하위 쿼리를 실행해야 함을 기억하십시오.