2013-03-06 167 views
0

我一直试图让这个工作,但我没有得到任何地方。我需要的是以下内容:在SQL查询中选择除了最大记录以外的所有记录

我需要能够为特定表格选择除MAX记录以外的所有记录。我知道如何选择最大记录(通过使用TOP或MAX),但我想显示除此之外的所有内容。有没有办法做到这一点?我已经尝试了下面的代码,但我一直在获取MAX记录。

SELECT 
    rtrim(ltrim(pn.sFirstName + ' ' + pn.uLastName)) as newroom 
    FROM tenant t (nolock) 
    INNER JOIN room rm (NOLOCK) on t.hmyperson = rm.hmytenant 
      and isnull(rm.boccupant,0)=0 
      and rm.dtmoveout is null 
    INNER JOIN person pn (nolock) on pn.hmy = rm.hmyperson 
    WHERE pn.hmy <> 
    (SELECT TOP 1 pn.hmy 
    FROM tenant t (nolock) 
    INNER JOIN property p (nolock) on p.hMy = t.hProperty 
    INNER JOIN unit u (nolock) on (t.hUnit = u.hMy 
    INNER JOIN addr ua (nolock) on u.hmy = ua.hPointer 
    INNER JOIN room rm (NOLOCK) on t.hmyperson = rm.hmytenant 
      and isnull(rm.boccupant,0)=0 
     and rm.dtmoveout is null 
     and isnull(rm.dtMoveIn,getdate()) >= getdate() 
    INNER JOIN person pn (nolock) on pn.hmy = rm.hmyperson 
    WHERE t.code = '011212' 
    ORDER BY pn.hmy) 
    and t.code = '011212' 

当我拉出记录后,我想将MAX记录合并到一个单独的行中。

感谢您的任何帮助。

+1

看看http://stackoverflow.com/questions/6751249/correlated-query-select-where-condition-not-maxcondition-in-inner-query – RandomUs1r 2013-03-06 17:09:25

+0

要删除一行,你可以使用'MINUS'或'SUBTRACT',具体取决于sql的味道。 – Glenn 2013-03-06 17:10:03

回答

1

在您的查询:第9行 - 将其更改为:

SELECT MAX(pn.hmy) 

和删除线20.没有必要。

+0

谢谢。我将它与Praveen的解决方案配合使用。还有一个问题 - 是否有办法将MAX记录合并到同一个SQL语句中?我的结果如下所示:最大记录,所有其他记录(在一行中)。最多可以有4个符合“所有其他记录”的名称。谢谢 – 2013-03-07 16:32:39

+0

将其标记为有用,以便它可以帮助其他人:) – 2013-03-07 16:37:20

0

基本上,你想这样:

SELECT * FROM tableA WHERE tableA.ID < (SELECT MAX(ID) FROM tableA)

0
select 
    MaxValue = Max(/* whatever*/), 
    -- other required columns 
from 
: 
: 
group by -- as needed 
having value <> MaxValue 
0

感谢输入..

我拉近了许多。我的下一个障碍是试图分离剩余的记录。例如,有多个名称链接到该记录。

我想它是:

NewRoom,NewRoom2

鲍勃·史密斯, 乔治·威尔逊

我得到:

NewRoom,NewRoom2

BobSmith

George Wils在

我下面的代码:

SELECT 
rtrim(ltrim(pn.sFirstName + ' ' + pn.uLastName)) as newroom, 
rtrim(ltrim(pn1.sFirstName + ' ' + pn1.uLastName))as newroom2 
FROM tenant t (nolock) 
INNER JOIN room rm (NOLOCK) on t.hmyperson = rm.hmytenant 
     and isnull(rm.boccupant,0)=0 
     and rm.dtmoveout is null 
INNER JOIN person pn (nolock) on pn.hmy = rm.hmyperson 
LEFT OUTER JOIN room rm1 (NOLOCK) on t.hmyperson = rm1.hmytenant 
     and isnull(rm1.boccupant,0)=0 
     and rm1.dtmoveout is null 
LEFT OUTER JOIN person pn1 (nolock) on pn1.hmy = rm1.hmyperson 
WHERE (pn.hmy or pn1.hmy) <> 
    (SELECT Max(pn.hmy) 
FROM tenant t (nolock) 
INNER JOIN property p (nolock) on p.hMy = t.hProperty 
INNER JOIN unit u (nolock) on (t.hUnit = u.hMy 
        and u.sCode not in ('WAIT' ,'COMAREA') 
        and u.scode not like 'NONRES%' 
        and u.exclude = '0') 
INNER JOIN addr ua (nolock) on u.hmy = ua.hPointer 
INNER JOIN room rm (NOLOCK) on t.hmyperson = rm.hmytenant 
     and isnull(rm.boccupant,0)=0 
    and rm.dtmoveout is null 
INNER JOIN person pn (nolock) on pn.hmy = rm.hmyperson 
WHERE t.scode = 't0029839' 

) 和t.scode = 't0029839'

更何况,我需要在同一行的最大记录,以及:

MAX_Room,新房,新房2

谢谢大家