1

SQLプログラミングの初心者で、私はこの関数を持っています。これはうまく機能します。

(
@clientId AS int
)
RETURNS NVARCHAR(50)
AS
BEGIN
declare @result nvarchar(50);
declare @lastDate Date;
declare @dateBefore Date;
declare @count float;
set @count = (select  MAX(A1c)-MIN(A1c) as change from
(select A1c from 
( select top 2 * from vw_MasterView where clientId = @clientId order by vw_masterView.LastVisitDate desc  ) as vw
group by A1c) as hh);
RETURN @count
end;

この関数を繰り返して、MasterViewから他の列を計算するので; 次のように、A1cを変数に変更したいと思います。

(
@clientId AS int,
@lab AS nvarchar(50)
)
RETURNS NVARCHAR(50)
AS
BEGIN
declare @result nvarchar(50);
declare @lastDate Date;
declare @dateBefore Date;
declare @count float;
set @count = (select  MAX(@lab)-MIN(@lab) as change from
(select @lab from 
( select top 2 * from vw_MasterView where clientId = @clientId order by vw_masterView.LastVisitDate desc  ) as vw
group by @lab) as hh);
RETURN @count
end;

次のエラーが発生しました。

Msg 164, Level 15, State 1, Procedure fn_changeA1c, Line 22
Each GROUP BY expression must contain at least one column that is not an outer reference.
Msg 8155, Level 16, State 2, Procedure fn_changeA1c, Line 22
No column name was specified for column 1 of 'hh'.

前もって感謝します。

4

1 に答える 1

0

関数の代わりにストアドプロシージャを使用する必要があります。

create procedure myprocedure
    @clientId AS int,
    @lab AS nvarchar(50)
    AS
BEGIN
    declare @result nvarchar(50);
    declare @lastDate Date;
    declare @dateBefore Date;
    declare @count float;
    declare @sql nvarchar(500);
    set @sql = 'select  MAX(' + @lab + ')-MIN(' + @lab + ') as change from
    (select ' + @lab + ' from 
    ( select top 2 * from vw_MasterView where clientId = ' + convert(nvarchar, @clientId) + ' order by    vw_masterView.LastVisitDate desc  ) as vw
    group by ' + @lab + ') as hh';
    execute sp_executesql @sql;
end;
于 2012-05-26T22:53:57.410 に答える