sql - 在 SQL Server 2008 中跨列返回最大值

标签 sql sql-server sql-server-2008 tsql

<分区>

在 SQL Server 2008 中,我需要在 T-SQL 中跨列查询并返回我找到的最大数字(下面的示例使用日期,但同样的想法适用于数字)。 “NULL”表示一个空值,而不是字面意思(抱歉,如果我是队长的话)。 “DesiredResultColumn”列显示了我希望从 Column1 到 Column3 中搜索的最终结果。我在这里找不到完全符合此要求的示例。


    ID       Column1    Column2     Column3        DesiredResultColumn
    001      1/1/2010   5/7/2011    8/12/2008      5/7/2011
    002      7/1/2014   7/3/2012    10/12/2013     7/1/2014
    003      9/1/2012   12/7/2012   NULL           12/7/2012
    004      11/1/2012  NULL        8/12/2013      8/12/2013

不幸的是,由于源系统的限制,我的表没有被规范化,否则 max 函数可以解决我的问题。想法?我很感激!

最佳答案

根据 similar question :

SELECT tbl.ID,
       (SELECT MAX(Date)
        FROM (VALUES (tbl.Column1), (tbl.Column2), (tbl.Column3)) AS AllDates(Date)) AS DesiredResultColumn
FROM tbl

当然,这只适用于 SQL 2008 及更高版本,但你说你有 2008,所以应该没问题。

关于使用 CASE 或类似表达式的好处之一是,它更短一些,而且在我看来更易于阅读。而且,它还处理 NULL 值,因此您实际上不必考虑它们。

关于sql - 在 SQL Server 2008 中跨列返回最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272496/

相关文章:

SQL Server 如何获取每个类别下的新闻数量

python - PYMSSQL/SQL Server 2014 : is there a limit to the length of a list of PKs to use as a subquery?

sql-server - SQL Server 2008 r2 - T-SQL LIKE 或 PATINDEX 匹配 A-Z、0-9、连字符、句点、下划线和波形符以外的字符

sql-server - 当输入参数为空时打印错误消息并终止程序

sql - 批处理与 SQL 语句

sql-server-2008 - 按空值和非空值分组

sql - 查询的正确排序依据

php - 电子商务网站上的嵌套模型菜单

sql - 如何删除 SQL Server 2008 中的 mdf 和 ldf 文件?

mysql - sqlmap 中基于 bool 和时间相关的 SQL 注入(inject)的组合