[英]Need the greatest value in new column
所以我有一個看起來像這樣的表:
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中的。
使用CASE Statement
您可以在各列中找到最大值。
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
如果您使用的是SQL SERVER 2008 or later versions
嘗試以下操作
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
使用SQL,您可以使用subselect執行以下操作:
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
我只是大聲思考,嘗試查看此偽代碼是否有效,請注意,您可以創建視圖或臨時表來存儲從4個選擇的並集返回的表。
祝好運
如果您在子查詢中使用一組並集來選擇每個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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.