--with Yitzhak Khabinsky's sample
-- DDL and sample data population, start
DECLARE @tbl TABLE (COMID INT IDENTITY PRIMARY KEY, HLR1 INT, HLR2 INT, HLR3 INT);
INSERT @tbl (HLR1, HLR2, HLR3) VALUES
(1,2,30),
(9,0,2);
--Option unoivot using cross apply
;with mycte as (select *
,row_number() over (partition by COMID order by max_value desc) as i
FROM @tbl AS t
CROSS APPLY (values('HLR1', HLR1), ('HLR2', HLR2),('HLR3', HLR3)) d (column_name,max_value)
)
select COMID,HLR1,HLR2,HLR3,column_name,max_value
from mycte m
where i=1
--Option JSON
;with mycte (TheKey, TheValue) as (
SELECT [KEY], Value from OpenJson((
select * from @tbl FOR JSON AUTO ))
WHERE type = 5)
,mycte2 as (
SELECT
--columns not in unpivot list
JSON_VALUE(src.TheValue,'$.COMID') COMID
,JSON_VALUE(src.TheValue,'$.HLR1') HLR1
,JSON_VALUE(src.TheValue,'$.HLR2') HLR2
,JSON_VALUE(src.TheValue,'$.HLR3') HLR3
,unpvt.[Key] column_name, unpvt.Value max_value
,row_number() over (partition by JSON_VALUE(src.TheValue,'$.COMID')
order by unpvt.Value desc) as rn
FROM mycte AS src
CROSS APPLY OpenJson(src.TheValue) AS unpvt
WHERE unpvt.[Key] not in ('COMID')
)
Select COMID,HLR1,HLR2,HLR3,column_name,max_value
from mycte2
where rn=1