由一对列sql分组

时间:2017-12-05 09:59:37

标签: sql sql-server-2008

我有一个SQL名称表:pgcPhieuThu

enter image description here

我想为SoPhieu创建一个存储过程: + if参数= 0然后SoPhieu =' PT-1-> n' else参数= 1然后SoPhieu =' BC-1-> n'

ALTER proc pgcPhieuThu_TaoSoPhieu3 
 @HinhThuc int,@SoPhieu NVARCHAR(50) OUTPUT
as
declare @MaPT INT
SELECT  @MaPT= ISNULL(SUBSTRING(MAX(pgcPhieuThu.SoPhieu),4, LEN(pgcPhieuThu.SoPhieu)),0) + 1
FROM pgcphieuthu
    GROUP BY SUBSTRING(pgcPhieuThu.SoPhieu,1,3)
SET @SoPhieu = CASE WHEN @HinhThuc = 0 then 'PT-'+ CAST(@MaPT AS NVARCHAR(50))
                    ELSE 'BC-'+ CAST(@MaPT AS NVARCHAR(50))

但是专栏' pgcphieuthu.SoPhieu'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

1 个答案:

答案 0 :(得分:0)

SoPhieu不是表格中的一列。它是存储过程的参数。 所以要取代“SoPhieu'在存储过程中使用SoPhieu'它应该继续工作。