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.

これで、このエラーの意味がわかりました。

しかし、2 列目に行を返したいので、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 に答える