2

我正在创建一个存储过程,它根据查询设置 3 个变量,我必须返回MAX它们的值。我试图在不使用临时表的情况下这样做,但是以下给了我错误Incorrect styntax near ')'

SELECT MAX(PermissionID)
FROM (SELECT @ContactPermission As PermissionID UNION ALL
      SELECT @GroupPermission As PermissionID)

我也试过

SELECT MAX((SELECT @ContactPermission UNION ALL SELECT @GroupPermission))

我得到了错误Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

我还尝试绕过变量并UNION在子查询中使用 a ...

SELECT MAX(PermissionID)
FROM (SELECT PermissionID
        FROM PermissionContact
        WHERE ContactID = @ContactID
      UNION ALL
      SELECT PermissionID
      FROM PermissionGroup
      WHERE GroupID = @GroupID)

这也给了Incorrect syntax near ')'

有什么想法或建议吗?临时表是我唯一的选择吗?

4

2 回答 2

3

你需要给你的派生表一个别名。

SELECT MAX(PermissionID)
FROM (SELECT @ContactPermission As PermissionID UNION ALL
      SELECT @GroupPermission As PermissionID) as T
于 2011-09-02T23:08:25.360 回答
1

或者只使用 case 语句

Select Case When @ContactPermission > @GroupPermission 
       Then @ContactPermission Else @GroupPermission End PermissionID

或者,

SELECT Case When c.PermissionID > g.PermissionId
        Then c.PermissionID Else g.PermissionId End
FROM PermissionContact c Cross Join PermissionGroup g   
Where c.ContactID = @ContactID
    And g.GroupID = @GroupID
于 2011-09-06T13:47:51.380 回答