这是一个示例表
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
答案 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;