繁体   English   中英

选择行的最大值和最大值的列名称作为SQL Server中的两列

[英]Select max value of a row and column name of the max value as two columns in SQL Server

我有一张桌子,看起来像:

    Area     Request    Assign     Complete
-----------------------------------------------
    area1        66       0         33                 
    area2        33       80        0
    area3        72       20        9
    area4         3       27        89

根据上表中行的最大值显示最大值和颜色

  • 如果最大值来自“请求”,则为“红色”
  • 如果最大值来自“分配”,则“蓝色”
  • 如果最大值来自“完成”,则为“绿色”

所需的输出:

            Area     Max_value  Color    
        -------------------------------
            area1        66      Red        
            area2        80      Blue       
            area3        72      Red       
            area4        89      Green 

试试下面的SELECT

SELECT AREA,
CASE WHEN Request > Assign AND Request > Complete THEN Request 
     WHEN Assign > Request AND Assign > Complete THEN Request  
     WHEN Complete > Request AND Complete > Assign THEN Request  
     ELSE NULL END AS Max_Value,
CASE WHEN Request > Assign AND Request > Complete THEN 'Red' 
     WHEN Assign > Request AND Assign > Complete THEN 'Blue'  
     WHEN Complete > Request AND Complete > Assign THEN 'Green'  
     ELSE NULL END AS Color
FROM YourTable

如下使用UNION ALL或UNION:

SELECT
    Area,
    Request AS MaxValue,
    'Red' AS Color
FROM TableName
WHERE Request>Assign AND Request>Complete
UNION ALL
SELECT
    Area,
    Assign AS MaxValue,
    'Blue' AS Color
FROM TableName
WHERE Assign>Request AND Assign>Complete
UNION ALL
SELECT
    Area,
    Complete AS MaxValue,
    'Green' AS Color
FROM TableName
WHERE Complete>Request AND Complete>Assign

您可以使用cross apply来找到最大值。 然后使用case表达式查找颜色

select
    Area, maxVal
    , Color = case 
        when maxVal = Request then 'Red'
        when maxVal = Assign then 'Blue'
        else 'Green'
    end 
from
    myTable
    cross apply (select maxVal = max(v) from (values (Request), (Assign), (Complete)) t(v)) q

请尝试此解决方案-

SELECT * , CASE WHEN MaxValue = Request THEN 'Red'
                WHEN MaxValue = Assign THEN 'Blue'
                WHEN MaxValue = Complete THEN 'Green'
            END Color
FROM ty
CROSS APPLY
(
    SELECT  Max(v) MaxValue
       FROM 
       (
              VALUES (Request) , (Assign), (Complete) 
       ) as value(v)
)u

输出值

Area       Request     Assign      Complete    MaxValue    Color
---------- ----------- ----------- ----------- ----------- -----
area1      66          0           33          66          Red
area2      33          80          0           80          Blue
area3      72          20          9           72          Red
area4      3           27          89          89          Green

(4 rows affected)

尝试这个:

select Area,
       case when Request > Assign then
                case when Request > Complete then Request
                     else Complete end
            else
                case when Assign > Complete then Assign
                     else Complete END
            end [Max_value],
        case when Request > Assign then
                case when Request > Complete then 'Red'
                     else 'Green' end
            else
                case when Assign > Complete then 'Blue'
                     else 'Green' END
            end [Color]
from MY_TABLE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM