1

次のようなストアド プロシージャがあります。

ALTER PROCEDURE [dbo].[Driverperformance] 
    @Ecode NVARCHAR(50), 
    @startdate DATETIME, 
    @enddate DATETIME
AS
BEGIN
    DECLARE @date1 DATETIME = CONVERT(DATETIME, @startdate + ' 00:01:00.000', 120);
    DECLARE @date2 DATETIME = CONVERT(DATETIME, @enddate + ' 23:23:59.000', 120);
    SELECT  e.Ecode
        ,   CAST(q.dtime AS DATE) AS Date
        ,   e.Ename
        ,   COUNT(q.Ecode) CntEcode
        ,   (
                SELECT COUNT(*)
                FROM Transaction_tbl
                WHERE dtime >= '' + @date1 + ''
                    AND dtime <= '' + @date2 + ''
                    AND DelEcode = @Ecode
                GROUP BY CAST(dtime AS DATE)
            )
    FROM EmployeeMaster_tbl e
    JOIN Transaction_tbl q ON e.Ecode = q.Ecode
    WHERE q.Ecode = @Ecode
        AND dtime >= '' + @date1 + ''
        AND dtime <= '' + @date2 + ''
    GROUP BY
        e.Ecode
    ,   e.Ename
    ,   CAST(q.dtime AS DATE)
    ORDER BY CAST(q.dtime AS DATE)
END

このクエリの実行中に、次のようなエラーが発生します。

サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

4

1 に答える 1

0

クエリには次のものがあります。

(
    SELECT COUNT(*)
    FROM Transaction_tbl
    WHERE dtime >= '' + @date1 + ''
        AND dtime <= '' + @date2 + ''
        AND DelEcode = @Ecode
    GROUP BY CAST(dtime AS DATE)
)

コラムとして。上記の GROUP BY により、選択した行ごとに複数の行が返されます。これは SQL では不可能です。

于 2013-09-04T11:52:56.243 に答える