복붙노트

[SQL] MySQL은 GREATEST와 유사한 SQL Server 2008의 기능?

SQL

MySQL은 GREATEST와 유사한 SQL Server 2008의 기능?

여러 개의 컬럼의 최대 값을 찾고 싶어요.

MySQL은 GREATEST 기능을 지원하지만 SQL Server는하지 않습니다.

어떤 기능 2008 SQL 서버에서이 유사 있습니까?

해결법

  1. ==============================

    1.당신이 그에서 최대를 선택 파생 테이블로 관심의 열을 보내고 하위 쿼리 UNION ALL를 추가 할 수 있도록 호 그러나 서브 쿼리는 외부 쿼리에서 열을 액세스 할 수 있습니다.

    당신이 그에서 최대를 선택 파생 테이블로 관심의 열을 보내고 하위 쿼리 UNION ALL를 추가 할 수 있도록 호 그러나 서브 쿼리는 외부 쿼리에서 열을 액세스 할 수 있습니다.

    SELECT *, 
          (SELECT MAX(c) FROM 
                        (SELECT number AS c 
                         UNION ALL 
                         SELECT status) T) AS GreatestNumberOrStatus
    FROM master..spt_values
    

    아니면 약간 더 간결 버전 당신이 2008 년이기 때문에.

    SELECT *, 
          (SELECT MAX(c) FROM (VALUES(number),(status)) T (c)) AS Greatest
    FROM master..spt_values
    
  2. ==============================

    2.다음과 같이이를 위해, 나는 스칼라 함수를 만들었습니다 :

    다음과 같이이를 위해, 나는 스칼라 함수를 만들었습니다 :

    CREATE FUNCTION [dbo].[MaxOrNull](@val1 int, @val2 int)
    returns int
    as
    begin
        if @val1 >= @val2 RETURN @val1
        if @val1 < @val2 RETURN @val2
    
        RETURN NULL
    end
    

    그것은 가장 우아한 해결책과 SQL 코드 어디에서나 사용할 수 있습니다.

  3. ==============================

    3.나는 다음과 같은 솔루션을 추천 할 것입니다 :

    나는 다음과 같은 솔루션을 추천 할 것입니다 :

    SELECT (CASE WHEN t.createdt < t.changedt THEN t.changedt ELSE t.created END) AS ChgDate
      FROM table t
    
  4. ==============================

    4.대신 또는 MAX TOP를 사용해보십시오.

    대신 또는 MAX TOP를 사용해보십시오.

  5. ==============================

    5.가능한 솔루션 :

    가능한 솔루션 :

    Create FUNCTION [dbo].[MaxOf]
        (
          @val1 INT =0,
          @val2 INT=0 ,
          @val3 INT =0,
          @val4 INT =0,
          @val5 INT =0,
          @val6 INT =0,
          @val7 INT =0,
          @val8 INT =0,
          @val9 INT =0,
          @val10 INT =0,
          @val11 INT =0,
          @val12 INT =0,
          @val13 INT =0,
          @val14 INT =0,
          @val15 INT =0,
          @val16 INT =0,
          @val17 INT =0,
          @val18 INT =0,
          @val19 INT =0,
          @val20 INT  =0)
          --OUTPUT 
         RETURNS INT  WITH SCHEMABINDING
    AS  
       BEGIN
            DECLARE  @MAX AS INT ;
            SET @MAX=0
            IF isnull(@val1,0)> isnull(@MAX,0) SET @MAX=isnull(@val1,0) 
            IF isnull(@val2,0)> isnull(@MAX,0) SET @MAX=isnull(@val2,0) 
            IF isnull(@val3,0)> isnull(@MAX,0) SET @MAX=isnull(@val3,0) 
            IF isnull(@val4,0)> isnull(@MAX,0) SET @MAX=isnull(@val4,0) 
            IF isnull(@val5,0)> isnull(@MAX,0) SET @MAX=isnull(@val5,0) 
            IF isnull(@val6,0)> isnull(@MAX,0) SET @MAX=isnull(@val6,0) 
            IF isnull(@val7,0)> isnull(@MAX,0) SET @MAX=isnull(@val7,0) 
            IF isnull(@val8,0)> isnull(@MAX,0) SET @MAX=isnull(@val8,0) 
            IF isnull(@val9,0)> isnull(@MAX,0) SET @MAX=isnull(@val9,0) 
            IF isnull(@val10,0)> isnull(@MAX,0) SET @MAX=isnull(@val10,0) 
            IF isnull(@val11,0)> isnull(@MAX,0) SET @MAX=isnull(@val11,0) 
            IF isnull(@val12,0)> isnull(@MAX,0) SET @MAX=isnull(@val12,0) 
            IF isnull(@val13,0)> isnull(@MAX,0) SET @MAX=isnull(@val13,0) 
            IF isnull(@val14,0)> isnull(@MAX,0) SET @MAX=isnull(@val14,0) 
            IF isnull(@val15,0)> isnull(@MAX,0) SET @MAX=isnull(@val15,0) 
            IF isnull(@val16,0)> isnull(@MAX,0) SET @MAX=isnull(@val16,0) 
            IF isnull(@val17,0)> isnull(@MAX,0) SET @MAX=isnull(@val17,0) 
            IF isnull(@val18,0)> isnull(@MAX,0) SET @MAX=isnull(@val18,0) 
            IF isnull(@val19,0)> isnull(@MAX,0) SET @MAX=isnull(@val19,0) 
            IF isnull(@val20,0)> isnull(@MAX,0) SET @MAX=isnull(@val20,0) 
    
            RETURN @MAX ;
        END
    

    그리고 통화가 될 것이다

    SELECT dbo.MaxOf (2,3,4,0,0,0,0,200,8,0,0,0,0,0,0,0,0,0,0,0)
    
  6. from https://stackoverflow.com/questions/4725823/function-in-sql-server-2008-similar-to-greatest-in-mysql by cc-by-sa and MIT license