[tsql] SQL에서 최소 두 값 얻기

두 가지 변수가 있는데 하나는 PaidThisMonth이고 다른 하나는 OwedPast입니다. 둘 다 SQL의 일부 하위 쿼리 결과입니다. 둘 중 작은 것을 선택하여 제목이 붙은 값으로 반환하려면 어떻게해야 PaidForPast합니까?

MIN함수는 변수가 아닌 열에서 작동합니다.



답변

사용 사례 :

   Select Case When @PaidThisMonth < @OwedPast 
               Then @PaidThisMonth Else @OwedPast End PaidForPast

인라인 테이블 값 UDF

CREATE FUNCTION Minimum
(@Param1 Integer, @Param2 Integer)
Returns Table As
Return(Select Case When @Param1 < @Param2 
                   Then @Param1 Else @Param2 End MinValue)

용법:

Select MinValue as PaidforPast 
From dbo.Minimum(@PaidThisMonth, @OwedPast)

부록 : 이것은 가능한 두 개의 값만 처리 할 때 가장 적합 할 것입니다. 둘 이상의 값이있는 경우 값 절을 사용하여 Craig의 답 을 고려하십시오 .


답변

SQL Server 2012 및 2014는 IIF (cont, true, false) 기능을 지원합니다. 따라서 최소한의 선택을 위해 다음과 같이 사용할 수 있습니다

SELECT IIF(first>second, second, first) the_minimal FROM table

IIF 는 글쓰기의 짧은 축약 형 이지만 작성 CASE...WHEN...ELSE하기가 더 쉽습니다.


답변

CASE, IIF 및 UDF를 사용하는 솔루션이 적합하지만 두 개 이상의 비교 값을 사용하여 문제를 일반적인 경우로 확장 할 때는 비실용적입니다. SQL Server 2008+의 일반화 된 솔루션은 VALUES 절의 이상한 응용 프로그램을 사용합니다.

SELECT
PaidForPast=(SELECT MIN(x) FROM (VALUES (PaidThisMonth),(OwedPast)) AS value(x))

이 웹 사이트로 인한 크레딧 :
http://sqlblog.com/blogs/jamie_thomson/archive/2012/01/20/use-values-clause-to-get-the-maximum-value-from-some-columns-sql- server-t-sql.aspx


답변

방금 업데이트 내에서 최대 4 개의 복잡한 선택을 찾아야하는 상황이있었습니다. 이 방법을 사용하면 원하는만큼 가질 수 있습니다!

숫자를 추가 선택으로 바꿀 수도 있습니다

select max(x)
 from (
 select 1 as 'x' union
 select 4 as 'x' union
 select 3 as 'x' union
 select 2 as 'x' 
 ) a

더 복잡한 사용법

 @answer = select Max(x)
           from (
                select @NumberA as 'x' union
                select @NumberB as 'x' union
                select @NumberC as 'x' union
                select (
                       Select Max(score) from TopScores
                       ) as 'x' 
     ) a

UDF의 성능이 더 좋다고 확신합니다.


답변

MySQL 또는 PostgreSQL 9.3+의 경우 LEASTGREATEST기능 을 사용하는 것이 더 좋습니다 .

SELECT GREATEST(A.date0, B.date0) AS date0, 
       LEAST(A.date1, B.date1, B.date2) AS date1
FROM A, B
WHERE B.x = A.x

와:

  • GREATEST(value [, ...]): 제공된 값에서 가장 큰 (최대 값) 인수를 리턴합니다.
  • LEAST(value [, ...])제공된 값에서 가장 작은 (최소값) 인수를 반환합니다

설명서 링크 :


답변

maximum (field, 0)을 계산하려는 경우 다음과 같은 트릭이 있습니다.

SELECT (ABS(field) + field)/2 FROM Table

field음수 이면 0을 , 그렇지 않으면 0을 반환 field합니다.


답변

CASE 문을 사용하십시오.

이 페이지의 예제 B는 수행하려는 작업과 비슷해야합니다.
http://msdn.microsoft.com/en-us/library/ms181765.aspx

페이지의 코드는 다음과 같습니다.

USE AdventureWorks;
GO
SELECT   ProductNumber, Name, 'Price Range' =
      CASE
         WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
         WHEN ListPrice < 50 THEN 'Under $50'
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
FROM Production.Product
ORDER BY ProductNumber ;
GO