2013-04-23 102 views
1

我有值獲取在SQL Server的每個行的最大值和最小值

enter image description here

我想個別的最高下面的輸出和最小值

enter image description here

一組行

對不起prntsceen。我不知道如何在stackoverflow中繪製表格。

+1

看着這個主題看起來像你的http://stackoverflow.com/questions/7097518/sql-selecting-min-value-from-row-data- not-column-data – 2013-04-23 09:54:09

+0

這將只返回最大或最小值。我想要整個表格以及兩個新的列,分別是最大值和最小值。 – 2013-04-23 09:57:33

+0

和ya如果行中有NULL值,最小值應該爲NULL – 2013-04-23 10:05:25

回答

10
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; 

爲了識別空值作爲分鐘值,可以使用以下代替

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; 
+0

gee ..感謝唯一的問題爲空的。 – 2013-04-23 10:16:31

+0

更新爲迎合空值 – RichardTheKiwi 2013-04-23 10:20:44

1

請嘗試:

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 
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 

結果窗口:

proff

+0

很酷這個人也爲我工作。謝謝 – 2013-04-23 10:51:10

+0

@RichardTheKiwi,你是對的。謝謝你的評論。 – Devart 2013-04-23 10:52:49

相關問題