从列中选择“最大值”并添加多个列

时间:2013-02-11 03:44:01

标签: sql sql-server

我有一张名为“病人”的表,看起来像

  PatientName    DateOftest    Eye     L1    L2    L3    L4     L5
    Mike         17-02-2009     L      23    25    40    32     30
    Mike         17-02-2009     R      25    30    34    35     24
    Bill         08-03-2006     L      20    24    30    24     25
    Bill         08-03-2006     R      18    25    27    30     24

现在,Iam在结果之后选择患者姓名和Dateoftest,眼睛为“Binocular”和“Sum”,它是该测试日期的L1,L2,L3,L4,L5的最高值的总和。 / p>

结果:

  PatientName    DateOftest      Eye          Sum
    Mike         17-02-2009    Binocular      160    
    Bill         08-03-2006    Binocular      130

这里“总和”是迈克左眼和右眼的最高值之​​和,即160和比尔是130。

4 个答案:

答案 0 :(得分:2)

DECLARE @Data AS TABLE
(
    PatientName varchar(10) NOT NULL,
    DateOfTest  date NOT NULL,
    Eye         char(1) NOT NULL,
    L1          tinyint NOT NULL,
    L2          tinyint NOT NULL,
    L3          tinyint NOT NULL,
    L4          tinyint NOT NULL,
    L5          tinyint NOT NULL
)

INSERT @Data
VALUES 
    ('Mike', '20090217', 'L', 23, 25, 40, 32, 30),
    ('Mike', '20090217', 'R', 25, 30, 34, 35, 24),
    ('Bill', '20060308', 'L', 20, 24, 30, 24, 25),
    ('Bill', '20060308', 'R', 18, 25, 27, 30, 24);

SELECT
    d.PatientName,
    d.DateOfTest,
    Eye = 'Binocular',
    [Sum] = MAX(L1) + MAX(L2) + MAX(L3) + MAX(L4) + MAX(L5)
FROM @Data AS d
GROUP BY
    d.PatientName,
    d.DateOfTest;

Output

答案 1 :(得分:1)

  SELECT PatientName, DateOfTest, "Binocular" AS Eye,
         MAX(L1 + L2 + L3 + L4 + L5) AS [Sum]
    FROM Patients
GROUP BY PatientName, DateOfTest, Eye

答案 2 :(得分:0)

使用GROUP BYMAX

尝试此操作
SELECT PatientName, 
   DateOfTest,
   MAX(L1) + MAX(L2) + MAX(L3) + MAX(L4) + MAX(L5) SummedVal,
   'Binocular' Eye
FROM Patients
GROUP BY PatientName, DateOfTest, Eye

这是一个快速Fiddle

请注意使用MAX(L1 + L2 ...)与MAX(L1)+ MAX(L2)的区别... - 第一个不会产生正确的结果。

祝你好运。

答案 3 :(得分:0)

这不会搜索整个列,这将搜索特定日期和特定患者的最大值。因为我们在这里使用组。

select PatientName,
       DateOftest,
       Max(L1)+Max(L2)+Max(L3)+Max(L4)+Max(L5) as Sum,
      'Binocular' Eye 
from table 
group by PatientName,DateOftest,Eye