0

我正在尝试选择一个职位,然后选择它旁边的报告行。

我的查询是:

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

不想要的是:

Topmost
1234
2345
3456
4567
5678

其中 topmost 是最优秀的员工,例如 CEO,reportline 是向他汇报的人。

4

2 回答 2

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示例

于 2013-08-06T08:16:56.347 回答
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
于 2013-08-06T08:09:31.997 回答