2011-09-02 3 views
2

쿼리를 기반으로 3 개의 변수를 설정하는 저장 프로 시저를 만들고 있는데 그 중 MAX 값을 반환해야합니다. 나는 그러나 다음 임시 테이블을 사용하지 않고 그렇게 시도하고 나에게 나는 또한SQL Server : 임시 테이블을 사용하지 않고 SELECT 문의 두 테이블을 UNION 할 수 있습니까?

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

을 시도 Incorrect styntax near ')'

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

오류를주고 내가 Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

가 나는 또한이 오류를 얻을 변수를 우회하고 하위 쿼리에서 UNION을 사용하려고 시도했습니다 ...

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

이것은 또한 제공합니다 Incorrect syntax near ')'

어떤 생각이나 제안? 임시 테이블이 유일한 옵션입니까?

답변

3

파생 테이블에 별칭을 지정해야합니다.

SELECT MAX(PermissionID) 
FROM (SELECT @ContactPermission As PermissionID UNION ALL 
     SELECT @GroupPermission As PermissionID) as T 
+0

... SO 톤, 나는 몇 분에 답변으로 표시합니다 감사합니다 나를시켜. – jon3laze

+3

+1 또한'SELECT MAX (PermissionID) FROM (VALUES (@ContactPermission, @ContactPermission, @GroupPermission))을 사용할 수 있습니다. T (PermissionID)' –

1

또는 단지의 경우 문

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 
그래서 간단하고 빠른
관련 문제