Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
Mng
Yak Posting Veteran
59 Posts |
Posted - 2010-02-13 : 23:48:16
|
Hi, i want to update the column from below table by taking the highest value column name.SID RED BLUE GREEN HIGH_COLOR1 12 15 5 2 45 56 6 3 67 5 7 4 78 7 79 Now i want to update the column "High_Color" by getting the highest value(column name of that value) from that row. Output looks as belowSID RED BLUE GREEN HIGH_COLOR1 12 15 5 BLUE2 45 56 6 BLUE 3 67 5 7 RED4 78 7 79 GREENPlease can any one provide the update query for this requirement. |
|
|
sodeep
Master Smack Fu Yak Hacker
7174 Posts |
Posted - 2010-02-14 : 00:41:43
|
UPDATE TSET T.HIGHCOLOR = M.HCOLORfrom TABLE TINNER JOIN(SELECT *,Case When RED > BLUE and RED > GREEN Then 'RED' When BLUE > RED and BLUE > GREEN Then BLUE ELSE 'GREEN' END as HColor from TABLE)M ON M.SID = T.SID |
 |
|
|
Mng
Yak Posting Veteran
59 Posts |
Posted - 2010-02-14 : 00:52:41
|
Hi Sodeep,thanks for ur query. But i can't use this query bcz i have 160 column in my table(i just gave only 3 in forum) and around 200 million rows. How can do this now?quote: Originally posted by sodeep
UPDATE TSET T.HIGHCOLOR = M.HCOLORfrom TABLE TINNER JOIN(SELECT *,Case When RED > BLUE and RED > GREEN Then 'RED' When BLUE > RED and BLUE > GREEN Then BLUE ELSE 'GREEN' END as HColor from TABLE)M ON M.SID = T.SID
|
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-02-14 : 03:47:42
|
| [code]CREATE Table #Colors(SID int, RED int, BLUE int, GREEN int, HIGH_COLOR varchar(100))INSERT INTO #Colors (SID,RED,BLUE,GREEN)SELECT 1, 12, 15, 5 union allSELECT 2, 45, 56, 6 union all SELECT 3, 67, 5, 7 union all SELECT 4, 78, 7, 79 SELECT * FROM #ColorsUPDATE rSET r.HIGH_COLOR=p.ColorFROM #Colors rINNER JOIN(SELECT ROW_NUMBER() OVER (PARTITION BY SID ORDER BY Value DESC) AS Seq, *FROM (SELECT SID,RED,BLUE,GREEN FROM #Colors)tUNPIVOT(Value FOR Color IN ([RED],[BLUE],GREEN))u) pON p.SID=r.SIDAND p.Seq=1SELECT * FROM #Colorsdrop table #Colorsoutput-----------------------------------------beforeSID RED BLUE GREEN HIGH_COLOR1 12 15 5 NULL2 45 56 6 NULL3 67 5 7 NULL4 78 7 79 NULLafter updateSID RED BLUE GREEN HIGH_COLOR1 12 15 5 BLUE2 45 56 6 BLUE3 67 5 7 RED4 78 7 79 GREEN[/code]------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
|
ms65g
Constraint Violating Yak Guru
497 Posts |
Posted - 2010-02-14 : 07:52:09
|
Keep it simple  SET NOCOUNT ONCREATE Table #Colors(SID int, RED int, BLUE int, GREEN int, HIGH_COLOR varchar(100))INSERT INTO #Colors (SID,RED,BLUE,GREEN)SELECT 1, 12, 15, 5 union allSELECT 2, 45, 56, 6 union all SELECT 3, 67, 5, 7 union all SELECT 4, 78, 7, 79 SELECT * FROM #ColorsUPDATE tSET HIGH_COLOR = (SELECT d.k FROM (SELECT red, 'RED' FROM #colors WHERE SID=t.SID UNION ALL SELECT blue, 'BLUE' FROM #colors WHERE SID=t.SID UNION ALL SELECT green, 'GREEN' FROM #colors WHERE SID=t.SID) d(i, k) WHERE d.i >=ALL (SELECT red FROM #colors WHERE SID=t.SID UNION ALL SELECT blue FROM #colors WHERE SID=t.SID UNION ALL SELECT green FROM #colors WHERE SID=t.SID))FROM #colors t;SELECT * FROM #Colorsdrop table #Colors/*BeforSID RED BLUE GREEN HIGH_COLOR----------- ----------- ----------- ----------- -------------1 12 15 5 NULL2 45 56 6 NULL3 67 5 7 NULL4 78 7 79 NULLAfterSID RED BLUE GREEN HIGH_COLOR----------- ----------- ----------- ----------- ------------1 12 15 5 BLUE2 45 56 6 BLUE3 67 5 7 RED4 78 7 79 GREEN*/ |
 |
|
|
Sachin.Nand
2937 Posts |
Posted - 2010-02-14 : 11:46:52
|
Here is my method.Its a cocktail of methods posted by Visakh & ms65g  create table #Colors (SID int, RED int, BLUE int, GREEN int, HIGH_COLOR varchar(100))INSERT INTO #Colors (SID,RED,BLUE,GREEN)SELECT 1, 12, 15, 5 union allSELECT 2, 45, 56, 6 union all SELECT 3, 67, 5, 7 union all SELECT 4, 78, 7, 79 SELECT * FROM #Colorsupdate c set c.High_color=t2.High_color from #Colors c inner join ( select * from ( select RED,BLUE,GREEN,sid, ( select top 1 value from ( select red as value union all select blue as value union all select green as value )as d order by value desc ) as maxvalue from #Colors )T UNPIVOT (value FOR High_color IN (RED, blue, green) )as upt where maxvalue=value)t2 on c.SID=t2.SIDselect * from #Colorsdrop table #Colors PBUH |
 |
|
|
ms65g
Constraint Violating Yak Guru
497 Posts |
Posted - 2010-02-14 : 16:01:51
|
use external column aliasing for beter style.quote: Originally posted by Idera
(select red as value union all select blue as value union all select green as value)as d(value) order by value desc PBUH
|
 |
|
|
Sachin.Nand
2937 Posts |
Posted - 2010-02-14 : 23:25:29
|
quote: Originally posted by ms65g use external column aliasing for beter style.quote: Originally posted by Idera
(select red as value union all select blue as value union all select green as value)as d(value) order by value desc PBUH
Thanks for this.I will keep this in mind next time PBUH |
 |
|
|
ms65g
Constraint Violating Yak Guru
497 Posts |
Posted - 2010-02-15 : 00:25:06
|
| You are welcome.Read "Programming Style by Joe CELKO" if you want to write code in great form. |
 |
|
|
|
|
|
|
|