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 
      FROM   employeemaster_tbl e 
             JOIN transaction_tbl q 
               ON e.ecode = q.ecode 
      WHERE  q.ecode = @Ecode 
             AND dtime >= '' + @date1 + '' 
             AND dtime <= '' + @date2 + '' 
      UNION 
      SELECT e.ecode, 
             Cast(q.dtime AS DATE) AS Date, 
             e.ename, 
             Count(q.delecode)     DelEcode 
      FROM   employeemaster_tbl e 
             JOIN transaction_tbl q 
               ON e.ecode = q.delecode 
      WHERE  q.delecode = @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 

これを実行中にエラーが発生します:

列 'EmployeeMaster_tbl.Ecode' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

4

1 に答える 1

2

GROUP BYの前のコード セグメントで を見逃しましたUNION

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 
      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)              
      UNION 
      SELECT e.ecode, 
             Cast(q.dtime AS DATE) AS Date, 
             e.ename, 
             Count(q.delecode)     DelEcode 
      FROM   employeemaster_tbl e 
             JOIN transaction_tbl q 
               ON e.ecode = q.delecode 
      WHERE  q.delecode = @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 

ラージ

于 2013-09-05T07:45:21.930 に答える