2013-08-06 3 views
0

위치를 선택하고 그 다음에 보고서 행을 선택하려고합니다.동일한 양의 열이 아닌 여러 select 문

내 쿼리는 다음과 같습니다

SELECT (SELECT pos.PositionId 
FROM PositionData pos 
WHERE pos.PositionId = 1234) as [Topmost], 
(SELECT pos.PositionId 
FROM PositionData pos 
WHERE pos.pdOpsReportLine = 1234) as [Reportline] 

오류 메신저지고는 다음과 같습니다

Msg 512, Level 16, State 1, Line 1 
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 

지금 나는이 오류가 무엇을 의미하는지 알고있다.

하지만 두 번째 열에서 반환 된 행을 원하는대로 TOP 문을 사용하고 싶지 않습니다.

참고 : 다음 문은 SQL Server의 열이어야합니다.

Topmost  Reportline 
1234   2345 
       3456 
       4567 
       5678 

은 내가을 원하지 않는 것은 이것이다 :

은 내가을 원하는 하는 것은 이것이다

맨 위는 CEO와 reportline처럼 맨 위의 선택된 직원이
Topmost 
1234 
2345 
3456 
4567 
5678 

그에게보고하는 사람들.

+1

* 특정 보고서 구조로의 출력. SQL로 함께 맹활약하기보다는보고 도구 나 다른 표현 코드로 처리하는 것이 더 좋습니다. –

+0

어떤 SQL 서버를 사용하고 있습니까? - 2008 또는 2012? 2012에는 SQL 2008에서 제공하지 않는 기능이 있습니다. – podiluska

+0

현재 SQL Server 2012를 사용하고 있습니다.하지만 보고서 작성자가 PROC에서 이것을 호출 할 것입니다. –

답변

3

당신이 이러한 형식의 모든 데이터를 받기를 원한다면, 당신은이 작업을 수행 할 수 있습니다

select 
    case 
     when row_number() over(partition by pos.PositionId order by pos1.pdOpsReportLine) = 1 then 
      pos.PositionId 
     else 
      null 
    end as [Topmost], 
    pos1.PositionId as [Reportline] 
from PositionData as pos 
    left outer join PositionData pos1 on pos.PositionId = pos1.pdOpsReportLine 
where pos.pdOpsReportLine is null 
order by pos.PositionId, pos1.pdOpsReportLine 

참조 * 포맷 것 정말에 대한 sqlfiddle 예를

0

이 시도 :

Declare @Topmost int=1234, 
@MinPositionId int 


SELECT @MinPositionId=min(pos.PositionId) 
FROM PositionData pos 
WHERE pos.pdOpsReportLine = @Topmost 

select @Topmost Topmost,@MinPositionId Reportline 

Union all 

SELECT '',pos.PositionId 
FROM PositionData pos 
WHERE pos.pdOpsReportLine = @Topmost 
and pos.PositionId != @MinPositionId