2013-10-14 4 views
1

SQL Server Management Studio에서 올바르게 실행되는 SQL 쿼리가 있지만 보고서를 작성하기 위해 jasperreports의 iReport에 복사하여 붙여 넣으면 SQL Server가 생깁니다. 예외는 결과 집합을 반환하지 않는다고 말합니다. 이것은 나를 혼란스럽게 만들었다.SQL 서버 예외 : 문이 결과 집합을 반환하지 않았습니다.

쿼리는 다음과 같습니다이 나에게 어떤 결과 집합 반환 예외를주는 이유

declare @index int = 1 

declare @t Table(ID INT, DI INT, INDBOOK1 INT, INDBOOK2 INT, delta INT) 

while(@index < 18) 
begin 
    INSERT INTO @t 
     select distinct top 18 
     col1.ID, 
     col1.DI, 
     col1.INDBOOK as INDBOOK1, 
     col2.INDBOOK as INDBOOK2, 
     col2.INDBOOK - col1.INDBOOK 
     FROM 
      table as col1 
     inner join 
      table as col2 on col2.ID = @index 
         and col2.DI = col1.DI+1 
     where 
      col1.ID = @index 

    set @index = @index + 1 
end 

select ID, DI, INDBOOK1, INDBOOK2, delta FROM @t 

는 사람은 알고 있나요?

도움을 주시면 감사하겠습니다.

+3

SQL 구문 분석시. 이 작업을 수행하려면 실제로 루프가 필요합니까? 나는 그렇게 생각하지 않는다. –

+0

입력 해 주셔서 감사합니다. 나는 너에게 동의한다. 그러나 반복없이이 작업을 어떻게 수행합니까? –

+0

나는 당신을 안내해주고 싶지만, 현재 실패한 것에 기반하여 CTE 나 조인 또는 복잡한 SQL이 무엇이든 당신의보고 도구를 깨뜨리지 않을 것이라고 확신하지 못합니다. –

답변

0

샘플 데이터 등없이 말할 힘든하지만 난이 더 명시 적 루프가 하나의 문에서, 당신이 필요 가까이 있어야한다고 생각 : 아마 당신이 사용하는 도구가 잘되지 않기 때문에

;WITH x([index]) AS 
(
    SELECT TOP (18) ROW_NUMBER() OVER (ORDER BY number) 
    FROM master..spt_values ORDER BY number 
), 
y AS 
(
    SELECT [index] = ROW_NUMBER() OVER (PARTITION BY col1.ID ORDER BY col1.ID), 
     col1.ID, col1.DI, col1.INDBOOK as INDBOOK1, col2.INDBOOK as INDBOOK2, 
     col2.INDBOOK - col1.INDBOOK as delta 
     FROM dbo.table as col1 
     INNER JOIN dbo.table as col2 
     ON col2.ID = col1.ID 
     AND col2.DI = col1.DI+1 
) 
SELECT y.ID, y.DI, y.INDBOOK1, y.INDBOOK2, y.delta 
FROM x INNER JOIN y 
ON x.[index] = y.[index] 
WHERE y.[index] <= 18; 
관련 문제