SQL Server Max语句返回多个结果
查询两个表(t1、t2)并对t2中的一列使用MAX语句时,SQL返回多个条目 这似乎是因为我还从t2查询其他信息,这些信息由唯一的条目组成 简化表格示例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.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