【问题标题】:Get MAX and MIN values of each rows in sql server获取sql server中每一行的MAX和MIN值
【发布时间】:2013-04-23 09:51:00
【问题描述】:

我有一组带有值的行

我想要以下带有单独最大值和最小值的输出

对不起可怜的prntsceen。我不知道如何在stackoverflow中绘制表格。

【问题讨论】:

  • 看这个话题好像你的stackoverflow.com/questions/7097518/…
  • 只会返回最大值或最小值。我想要整个表以及两个具有最大值和最小值的新列。
  • 你的表里有ID吗?也许您可以使用 [PIVOT][1] 来旋转表格,从而获得最小值和最大值。 [1]:msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
  • 不,那是我没有身份证的问题。该表实际上是在运行时创建的。我所拥有的只是通过 Row_Number() 方法获得的 rowid
  • 如果行中有 Null,则最小值应为 NULL

标签: sql sql-server sql-server-2008 sql-server-2005


【解决方案1】:
select value1, value2, value3, value4,
       [min]=(select min(value) from (
              select value1 union all
              select value2 union all
              select value3 union all
              select value4) X(value)),
       [max]=(select max(value) from (
              select value1 union all
              select value2 union all
              select value3 union all
              select value4) Y(value))
  from tbl;

要将 NULL 识别为 min 值,请改用下面的

select value1, value2, value3, value4,
       [min]=(select TOP(1) value from (
                 select value1 union all
                 select value2 union all
                 select value3 union all
                 select value4) X(value)
              ORDER BY value ASC),
       [max]=(select TOP(1) value from (
                 select value1 union all
                 select value2 union all
                 select value3 union all
                 select value4) X(value)
              ORDER BY value DESC)
  from tbl;

【讨论】:

  • 更新以适应空值
【解决方案2】:

试试这个 -

DECLARE @temp TABLE
(
      Value1 INT
    , Value2 INT
    , Value3 INT
    , Value4 INT
)

INSERT INTO @temp (Value1, Value2, Value3, Value4)
VALUES 
    (NULL, 1, 1, NULL),
    (NULL, 1, 2, NULL),
    (NULL, 2, 2, NULL),
    (NULL, 2, 2, NULL),
    (1, 1, 1, 1),
    (2, 2, 1, 2),
    (1, 1, 1, NULL),
    (2, 2, 3, 2),
    (2, 2, 2, 2),
    (1, 1, 1, 1)

SELECT
      Value1
    , Value2
    , Value3
    , Value4
    , MinValue = (
        SELECT TOP 1 value 
        FROM (
            SELECT value = value1
              UNION
            SELECT value2
              UNION
            SELECT value3
              UNION
            SELECT value4
        ) mn
        ORDER BY value
    )
    , MaxValue = (
        SELECT MAX(value) 
        FROM (
            SELECT value = value1
              UNION
            SELECT value2
              UNION
            SELECT value3
              UNION
            SELECT value4
        ) mx
    )
FROM @temp

结果窗口:

【讨论】:

    【解决方案3】:

    请尝试:

    declare @T table
    (
      id int, 
      num1 int, 
      num2 int, 
      num3 int,  
      num4 int,   
      num5 int
    )
    
    insert into @T values
    (1,     6,      51,      NULL,      99,      34),
    (2,     222,    251,     24,     299,     234),
    (3,     NULL,   NULL,    NULL,   NULL,    NULL)
    
    select * From @T
    
    SELECT id,
    (SELECT 
    (CASE WHEN (num1+num2+num3+num4+num5) IS NULL THEN NULL 
        ELSE MIN(v) end) 
    FROM (VALUES (num1), 
                (num2), 
                (num3), 
                (num4), 
                (num5)) AS value(v)) as [MinVal],
    (SELECT MAX(v) 
    FROM (VALUES (num1), 
                (num2), 
                (num3), 
                (num4), 
                (num5)) AS value(v)) as [MaxVal]
    FROM @T
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 2021-10-18
      • 2017-06-10
      • 1970-01-01
      相关资源
      最近更新 更多