0

別の select ステートメントを挿入したビューを作成し、そのステートメントに「エイリアス」を含む別のフィールドとしてラベルを付けました。

ビューは正常に実行されましたが、ビューから select ステートメントを起動しようとすると (select * from view)、次のエラーがスローされます。

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

これで、このエラーが発生する理由がわかりました。これは、内側の選択クエリが複数の行を返すためです。複数の行が必要なため、TOP 1 に行くことはできません。

 ALTER VIEW [dbo].[TestView_new]
    AS

            SELECT TOP ( 100 ) PERCENT
                        dbo.DataRepository.PeriodStatus ,
                        dbo.DataRepository.TimesheetName ,
                        dbo.DataRepository.TimesheetLineClass ,
                        dbo.DataRepository.TimesheetLineClassUID ,
                        dbo.MSP_EpmResource_UserView.ResourceName ,
                                                    dbo.MSP_EpmProject_UserView.ProjectName AS ProjectName ,
                        ( SELECT MSP_EpmProject_UserView.ProjectName
                          FROM      dbo.MSP_EpmProject_UserView
                                    LEFT JOIN dbo.DataRepository ON dbo.MSP_EpmProject_UserView.[ProjectUID] = dbo.DataRepository.[ProjectUID]
                          WHERE     LTRIM(RTRIM(dbo.DataRepository.[ProjectUID])) IS NOT NULL
                                    OR LTRIM(RTRIM(dbo.DataRepository.[ProjectUID])) <> '') AS ProjectName2 ,

        FROM    dbo.DataRepository
                    INNER JOIN dbo.MSP_TimesheetActual ON dbo.DataRepository.TimesheetLineUID = dbo.MSP_TimesheetActual.TimesheetLineUID
                    LEFT OUTER JOIN dbo.MSP_EpmResource_UserView ON dbo.DataRepository.ResourceUID = dbo.MSP_EpmResource_UserView.ResourceUID
                    LEFT OUTER JOIN dbo.MSP_EpmProject_UserView ON dbo.DataRepository.ProjectUID = dbo.MSP_EpmProject_UserView.ProjectUID

私の質問: エラーを解決する方法はありますか?

4

1 に答える 1

0

サブクエリで複数の結果を取得しようとすることはできません。内部クエリとメイン クエリの 2 番目の LEFT OUTER JOIN の両方で MSP_EpmProject_UserView と DataRepository を結合しようとしているようです。これらのテーブルの構造がなければ、1 つのプロジェクト名に対して複数の異なる ProjectUID があり、それが複数の行を返す理由であると推測しています。その場合、DISTINCT は便利です。そうでない場合は、GROUP BY 句を使用してみてください。もう一度言いますが、テーブルの構造を知らなければ、これ以上のことは言えません。それが役に立てば幸い。

于 2012-05-29T07:18:26.737 に答える