【发布时间】:2011-04-20 01:10:26
【问题描述】:
我有一个类似这样的查询:
;WITH t as
(
select 1 as RowNumber, 1 as ObjectID, 10 as [Col1], 20 as [Col2], 20 as [Col3], 20 as [Col4] UNION ALL
select 2 as RowNumber, 2 as ObjectID, 20 as [Col1], 30 as [Col2], 40 as [Col3], 50 as [Col4]
)
SELECT RowNumber, ObjectID,
(
SELECT MAX(Amount)
FROM (
SELECT [Col1] AS Amount
UNION ALL
SELECT [Col2]
UNION ALL
SELECT [Col3]
UNION ALL
SELECT [Col4]
) d
WHERE Amount > 0
)
FROM t
查询工作正常,但我想知道 Max(Amount) 来自哪里。
因此,在我的结果集中,除了具有 (RowNumber, ObjectId, Amount) 之外,我还希望将列的名称 (Col1, Col2, Col3, Col4) 作为字符串。
有什么办法吗?
编辑 cmets 的问题:如果两列具有相同的最大值,它可能是任何一个?是的,它可以是任何一个。只要我知道它可能来自哪里,任何列名都可以。
使用 SQL Server 2008
【问题讨论】:
-
如果 Col1 和 Col2 有相同的 MAX 怎么办:它可能是任何一个......?
-
希望您不介意我刚刚编辑了您的代码以使其成为可运行的示例,因为我以前从未见过这种方法。随意回滚!
-
@Martin:我对编辑很好。让人们更容易回答。谢谢你。
标签: sql sql-server tsql sql-server-2008