2014-11-10 1 views
1

그래서 나는 다음과 같다 테이블이 있습니다는 새 열에서 가장 큰 값을 필요

ID  amt_1  amt_2  amt_3  amt_4 
001 100.00 300.00  50.00 200.00 
002 200.00 400.00 100.00 200.00 
003 700.00  50.0  200.00 700.00 

을 그리고 ID의 예를 당 가장 큰 값을 전달하는 새로운 열을 만들고 싶어 :

ID  amt_1  amt_2  amt_3  amt_4  NEW_COL 
001 100.00 300.00  50.00 200.00 300.00 
002 200.00 400.00 100.00 200.00 400.00 
003 700.00  50.0  200.00 700.00 700.00 

CTE가 나를 도와 줄 것이라고 생각하지 않지만 CTE를 인식하지 못하는 Tableau로 가져 오기 때문에 CTE를 사용할 수 없다고 말합니다.

+0

어떤 DBMS에서 선택 하시겠습니까? – paqogomez

+0

@paqogomez 그는 CTE를 언급 한 이후로 SQL Server를 사용하고 있다고 가정합니다. –

답변

1

CASE Statement을 사용하면 열 중에서 가장 큰 값을 찾을 수 있습니다. 당신이 SQL SERVER 2008 or later versions를 사용하는 경우

SELECT ID, 
     amt_1, 
     amt_2, 
     amt_3, 
     amt_4, 
     CASE 
     WHEN amt_1 >= amt_2 AND amt_1 >= amt_3 AND amt_1 >= amt_4 THEN amt_1 
     WHEN amt_2 >= amt_1 AND amt_2 >= amt_3 AND amt_2 >= amt_4 THEN amt_2 
     WHEN amt_3 >= amt_1 AND amt_3 >= amt_2 AND amt_3 >= amt_4 THEN amt_3 
     WHEN amt_4 >= amt_1 AND amt_4 >= amt_2 AND amt_4 >= amt_3 THEN amt_4 
     END NEW_COL 
FROM Tablename 

다음 이런 식으로 뭔가 할 부속을 사용할 수 있습니다,이

SELECT ID,amt_1,amt_2,amt_3,amt_4, 
    (SELECT Max(amt) FROM (VALUES (amt_1), (amt_2), (amt_3),(amt_4)) AS value(amt)) NEW_COL 
FROM tablename 
+0

나는 이것이 내가해야 할 일이라고 생각한다. 적은 텍스트로 그것을 할 수있는 방법이 있기를 바랄뿐입니다. Anywho - 이것을 연결하고 다시보고하겠습니다. – user3486773

0

사용하여 SQL을 시도해보십시오

SELECT MAX(SELECT amt_1 FROM table_name 
UNION 
SELECT amt_2 FROM table_name 
UNION 
SELECT amt_3 FROM table_name 
// ...) as maxValue, id FROM table_name 

난 그냥 큰 소리로 생각하고 있어요을 시도 이 의사 코드가 작동하는지 확인하려면 뷰 또는 임시 테이블을 만들어 Union의 4 개의 선택 항목에서 반환 된 테이블을 저장할 수 있습니다.

goodluck는

0

amt_# 값을 선택하고 그 (ID에 의해 그룹화)에서 각 ID의 최대 선택하는 하위 쿼리에서 노동 조합의 집합을 사용하는 경우 그것은 당신이 필요로하는 무엇을 얻어야한다 :

select 
    mt.ID, 
    mt.amt_1, 
    mt.amt_2, 
    mt.amt_3, 
    mt.amt_4, 
    max(amt) 
from (
    select 
     ID, 
     amt_1 as amt 
    from MyTable 
    Union 
    select 
     ID, 
     amt_2 
    from MyTable 
    Union 
    select 
     ID, 
     amt_3 
    from MyTable 
    Union 
    select 
     ID, 
     amt_4 
    from MyTable 
) t1 
    inner join MyTable mt on t1.id = mt.ID 
group by mt.ID, amt_1, amt_2, amt_3, amt_4