SQL Server:添加一列并获取其他列名作为其值

时间:2014-02-05 03:20:31

标签: sql sql-server-2008 tsql

这是一个示例表

    DECLARE @t TABLE(a INT,b INT,c INT);
    INSERT @t VALUES(1,2,3),(9,8,7),(4,6,5);
    SELECT *
    ,      (   SELECT  MAX(val) 
               FROM    (VALUES (a)
                   ,   (b)
                   ,   (c)
               ) AS value(val)
           ) AS MaxVal 
    FROM @t;

结果:

A   B   C   MAX
---------------
1   2   3   3
9   8   7   9
4   6   5   6

我想添加一列Max_cols,其中包含其他列名作为其值。列名分别对应于'MAX'列中的值...(希望这是有道理的)。

结果应如下所示。

A   B   C   MAX   Max_cols
--------------------------
1   2   3     3       C
9   8   7     9       A
4   6   5     6       B

1 个答案:

答案 0 :(得分:1)

你不能真正动态地这样做(至少不能用表变量);一个解决方案是CASE表达式,它明确列出每个潜在的列名称。你没有解释你想如何处理关系,但是......

;WITH x AS (SELECT *,
 (
   SELECT  MAX(val) 
   FROM    (VALUES (a)
           ,   (b)
           ,   (c)
           ) AS value(val)
    ) AS MaxVal 
    FROM @t
 ) SELECT *, Max_cols = CASE MaxVal 
 WHEN a THEN 'A' WHEN b THEN 'B' WHEN c THEN 'C' END
 FROM x;