SQL Server Max语句返回多个结果

SQL Server Max语句返回多个结果,sql,sql-server,group-by,Sql,Sql Server,Group By,查询两个表(t1、t2)并对t2中的一列使用MAX语句时,SQL返回多个条目 这似乎是因为我还从t2查询其他信息,这些信息由唯一的条目组成 简化表格示例 t1.number t2.number_id t2.sync_id t2.text 1 1 1 'My problem is 1 1 2

查询两个表(t1、t2)并对t2中的一列使用MAX语句时,SQL返回多个条目

这似乎是因为我还从t2查询其他信息,这些信息由唯一的条目组成

简化表格示例

t1.number       t2.number_id       t2.sync_id       t2.text
1               1                  1                'My problem is 
1               1                  2                That
2               2                  3                Multiple entries
2               2                  1                Are
2               2                  2                Returned'
使用时

SELECT t1.number, max(t2.sync_id), convert(varchar(100),t2.text) 
FROM t1, t2 
WHERE t1.number = t2.number_id 
GROUP BY t1.number, convert(varchar(100),t2.text)

我从示例表中获得了多个条目,而不仅仅是第2行和第5行。

您需要从
groupby t1.number,convert(varchar(100),t2.text)
中删除
convert(varchar(100),t2.text)
。当您只想按
t1.number
进行分组时,您现在按两个标准进行分组


此外,您可能对如何在一行中获取
t2.text
列中的所有文本感兴趣。如果是这样,请看这里:

假设至少有SQL 2005,那么您可以使用:

标准sql方法

SELECT
     t1.number, 
     t2.sync_id, 
     convert(varchar(100),t2.text) 
FROM
    t1 
    INNER JOIN  t2 
    ON t1.number = t2.number_id 
    INNER JOIN (
       SELECT Max(t2.synch_id) synch_id, t1.number) 
       FROM   t1 
            INNER JOIN  t2 
            ON t1.number = t2.number_id ) max
    ON t1.number = max.number and 
       t2.synch_id = max.synch_id

对于每个t1.number和t2.text,group by需要是唯一的-在本例中,它们不是唯一的。由于每一行有不同的文本,您将返回每一行。你想得到什么结果?
SELECT
     t1.number, 
     t2.sync_id, 
     convert(varchar(100),t2.text) 
FROM
    t1 
    INNER JOIN  t2 
    ON t1.number = t2.number_id 
    INNER JOIN (
       SELECT Max(t2.synch_id) synch_id, t1.number) 
       FROM   t1 
            INNER JOIN  t2 
            ON t1.number = t2.number_id ) max
    ON t1.number = max.number and 
       t2.synch_id = max.synch_id