MS Reporting Services에서 동적 하위 쿼리를 수행하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/20876

문제

저는 SQL Server Reporting Services를 처음 사용하며 다음을 수행하는 가장 좋은 방법이 궁금합니다.

  • 인기 있는 ID 목록을 가져오는 쿼리
  • 다른 테이블에서 속성을 가져오기 위해 각 항목에 대한 하위 쿼리

이상적으로 최종 보고서 열은 다음과 같습니다.

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

이 모든 작업을 한 번에 수행하기 위해 거대한 SQL 쿼리를 구성하는 방법이 있을 수 있지만 저는 이를 구분하는 것을 선호합니다.각 행에 대해 하위 쿼리를 수행하기 위해 VB 함수를 작성하는 권장 방법이 있습니까?도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

나는 하위 보고서.SubReport를 테이블 셀에 배치합니다.

다른 팁

원하는 출력 모양에 따라 하위 보고서를 사용하거나 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 귀하가 제공한 예에서 상관 하위 쿼리보다 외부 조인이 더 나은 성능을 발휘할 것이라고 생각합니다.각 행에 대해 하위 쿼리를 실행해야 한다는 점을 기억하세요.

가장 간단한 방법은 다음과 같습니다.

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

다음은 실행 가능한 버전입니다(테이블 변수 사용).

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에 21 aug '08의 업데이트 :
@AlexCuse - 네, 성능에 전적으로 동의합니다.

나는 외부 조인을 사용하여 작성하기 시작했지만 그의 샘플 출력에서 ​​개수를 보고 그것이 그가 원하는 것이라고 생각했으며 테이블이 외부 조인된 경우 개수가 올바르게 반환되지 않을 것입니다.조인으로 인해 레코드가 의도치 않게 곱해질 수 있다는 점은 말할 것도 없습니다(tbl2의 2개 항목과 일치하는 tbl1의 1개 항목 = 2 반환).

따라서 귀하의 쿼리가 무엇을 반환해야 하는지에 대한 세부 사항으로 귀결되는 것 같습니다.


22:07에 21 aug '08의 업데이트 :
질문의 다른 부분에 대답하려면 VB 기능을 사용해야 합니까?아니요.절대적으로하지.이렇게 간단한 것은 아닙니다.

함수는 성능 면에서 매우 나쁩니다. 반환 집합의 각 행이 함수를 실행합니다.

쿼리의 여러 부분을 "구분화"하려면 저장 프로시저처럼 접근해야 합니다.임시 테이블을 작성하고, 쿼리의 일부를 수행하고 결과를 테이블에 삽입한 다음 필요한 추가 쿼리를 수행하고 원래 임시 테이블을 업데이트합니다(또는 추가 임시 테이블에 삽입).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top