2012-11-28 5 views
3

일부 테이블에서 최대 열 값을 얻으려고합니다. 예를 들어 아래의 발췌 문장 (작동하지 않습니다)에서 나는 MAX 값을 '3 개의 테이블 A, B 및 C 모두에있는'tickvalue '에서 얻으려고합니다. 값을 가져 오는 방법을 잘 모르겠습니다.t-SQL 쿼리의 MAX 함수

시변 값 열의 데이터 유형은 타임 스탬프입니다.

select 
c.somkey 
,MAX(a.tickvalue, b.tickvalue, c.tickvalue) as tickvalue 
from A as a 
join B as b 
on a.key = b.key 
join C as c 
on b.somekey = c.somkey 
where a.key = '<some key>' 

감사

MAX() 집계 함수는 TSQL에서 작동하는 방법하지
+0

당신은 결과 레코드의 첫 번째 열에 얻기 위해 무엇을 기대합니까? 하지만 이미 빈 문자열이 있다는 것을 이미 알고있는 것처럼 보입니다. – Igor

+0

@Igor 코드 스 니펫 – user1599610

+0

을 업데이트하십시오. 어떻게 작동하지 않습니까? – Igor

답변

3

(여기 참조 : TSQL MAX()를) 최대 기능은 하나의 열에서 최대 값을 가져옵니다.

원하는 것을 얻으려면 세 개의 값을 단일 열로 가져와야합니다. 이 작업은 다음을 사용하여 수행 할 수 있습니다. UNPIVOTPIVOT/UNPIVOT

이 스 니펫이 도움이 될 수 있습니다.

CREATE TABLE #A (ID INT, tickvalue INT) 
CREATE TABLE #B (ID INT, tickvalue INT) 
CREATE TABLE #C (ID INT, tickvalue INT) 

INSERT INTO #A VALUES (1,1) 
INSERT INTO #A VALUES (2,4) 
INSERT INTO #A VALUES (3,7) 
INSERT INTO #A VALUES (4,2) 
INSERT INTO #A VALUES (5,8) 

INSERT INTO #B VALUES (1,8) 
INSERT INTO #B VALUES (2,7) 
INSERT INTO #B VALUES (3,2) 
INSERT INTO #B VALUES (4,4) 
INSERT INTO #B VALUES (5,1) 

INSERT INTO #C VALUES (1,2) 
INSERT INTO #C VALUES (2,1) 
INSERT INTO #C VALUES (3,2) 
INSERT INTO #C VALUES (4,15) 
INSERT INTO #C VALUES (5,2) 


SELECT ID, MAX(tickvalue) 
FROM 
(SELECT C.ID, A.tickvalue t1, B.tickvalue t2, C.tickvalue t3 
FROM #A AS a 
JOIN #B AS b ON a.ID = b.ID 
JOIN #C AS c ON b.ID = c.ID) p 
UNPIVOT (tickvalue FOR tsource IN (t1,t2,t3)) AS unpvt 
GROUP BY ID 

DROP TABLE #A 
DROP TABLE #B 
DROP TABLE #C 
1

오라클에는 동일한 기능을 수행하는 Greatest 기능이 있습니다. 몇 시간 전 나는 Sql Server에서 동일한 내용을 썼다.이 내용은 here이다. 보세요, 나는 그것이 목적을 달성 할 것이라고 생각합니다. 사용 UNPIVOTE의

1

대안

SELECT c.ID, 
     CASE WHEN a.tickvalue >= b.tickvalue THEN 
               CASE WHEN a.tickvalue >= c.tickvalue THEN a.tickvalue ELSE c.tickvalue END 
              ELSE CASE WHEN b.tickvalue >= c.tickvalue THEN b.tickvalue ELSE c.tickvalue END END 
FROM A a JOIN B b ON a.ID = b.ID 
     JOIN C c ON b.ID = c.ID