2013-02-11 38 views
2

我有一个表命名为“患者”,它看起来像选择最大值FRM的列,并添加了多个列

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 

现在,荫结果这将选择病人姓名和Dateoftest和眼睛的“望远镜”后和“总和”,这是L1,L2,L3,L4,L5的对测试日期的最高值的总和..

结果:

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

这里的“总和”是最高值的总和来自左右眼迈克是160和比尔是130

+0

林类似选择PatientName后,DateOfTest,眼睛为 “望远镜”,最大(L1)+ MAX(L2)+ MAX(L3)+ MAX(L4)+最大(L5)as SUM where Distinct(PatientName and DateofTest); – user1375481 2013-02-11 04:51:12

回答

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
SELECT PatientName, DateOfTest, "Binocular" AS Eye, 
     MAX(L1 + L2 + L3 + L4 + L5) AS [Sum] 
    FROM Patients 
GROUP BY PatientName, DateOfTest, Eye 
+0

最大值不应该来自L1,L2,L3,L4和L5的全部列,只适用于特定的测试日期..这里麦克风的测试日期的最大值是.. 25 + 25 + 40 + 35 + 30是160.并且对于比尔..20 + 25 + 30 + 30 + 25也就是130 .. – user1375481 2013-02-11 04:29:27

+0

然后看到SQL Kiwi的回应。从这个问题来看,并不完全清楚你正在寻找L1,L2,L3 ......的每个*的最大值。 – hrunting 2013-02-11 13:08:53

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)...的区别 - 第一个不会产生正确的结果。

祝你好运。

+0

最大值不应该来自L1,L2,L3,L4和L5的全部列..仅适用于特定的测试日期..这里麦克风的测试日期的最大值是...... 25 + 25 + 40 + 35 + 30这是160.并且对于比尔..20 + 25 + 30 + 30 + 25其中是130 .. – user1375481 2013-02-11 04:30:11

+0

嗨。感谢您的帮助..但我需要特定日期和特定患者的最大值..不是为整个列的L1 .. – user1375481 2013-02-11 04:41:22

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