gpt4 book ai didi

sql - 从最大查询中选择列名

转载 作者:行者123 更新时间:2023-12-02 18:24:47 24 4
gpt4 key购买 nike

我有一个类似这样的查询:

 ;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) 作为字符串。

有什么办法可以做到这一点吗?

编辑评论中的问题:如果两列具有相同的最大值,则可能是其中之一?是的,可能是其中之一。只要我知道它来自哪里,任何列名称都可以。

使用 SQL Server 2008

最佳答案

不要使用 MAX:使用 TOP 可以避免聚合/GROUP BY。

它还可以使用WITH TIES处理重复项

我不确定您拥有的是伪代码还是子查询,但这应该可以满足您的要求

 SELECT TOP 1 -- WITH TIES if needed
*
FROM
(
SELECT RowNumber, ObjectID, [Col1] AS Amount, 'Col1' AS ColName
FROM table
UNION ALL
SELECT RowNumber, ObjectID, [Col2], 'Col2' AS ColName
FROM table
UNION ALL
SELECT RowNumber, ObjectID, [Col3], 'Col3' AS ColName
FROM table
UNION ALL
SELECT RowNumber, ObjectID, [Col4], 'Col4' AS ColName
FROM table
) foo
WHERE Amount > 0
ORDER BY Amount DESC

你的主要问题是,无论你怎么做,你都必须接触表 4 次,因为子查询只返回一个值。我也看不到 ROW_NUMBER 解决方案(但可能有一个...:-)

关于sql - 从最大查询中选择列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com