2

我在Id、State、City表中有三列。每个州包含几十个城市。我要做的就是选择独特的状态并获取它们的 ID。

SELECT DISTINCT(State) FROM LocationTable;

这非常有效,但我也需要获得 Id。我试过:

SELECT DISTINCT(State), Id FROM LocationTable 

SELECT State, Id FROM LocationTable GROUP BY State, Id

但它仍然不返回唯一状态。基本上我需要让这个 MySQL 查询在 MSSQL 上运行:

SELECT UNIQUE(State), Id FROM LocationTable;

谢谢!

4

3 回答 3

1

基于安德鲁的回答:

DISTINCT适用于整个数据集,而不仅仅是它之后的列。

SELECT distinct State, MAX(Id) 
FROM LocationTable 
GROUP BY state

会给你最大的Id数字。但是,就像 Andrew 所说,您必须选择如何限制Id您正在检索的内容。

有关工作示例,请参见此:http ://sqlfiddle.com/#!3/f5b42/5

于 2012-08-18T17:35:26.253 回答
0

尝试 distinct 作为关键字,而不是函数:

SELECT DISTINCT State,Id FROM LocationTable
于 2012-08-18T17:31:09.413 回答
0
SELECT State, Id FROM LocationTable GROUP BY State, Id 

当它找到 2 个匹配但具有不同 ID 的状态时,您希望它做什么?它将返回状态两次,每个 ID 一次。

我怀疑你的数据是这样的:

 ID, State, City
  1   WA    Seattle
  2   WA    Tacoma

当您说您想要该州的 ID 时,您将不得不选择想要的 ID、最大值、最小值等。该州没有单一的 ID。

对评论的回应:可能是这样的......

Select max(cast(id as binary(16)), state from locationtable group by state

但我认为 ID 的有效性在这里确实存在问题,您将如何处理 ID,它将仅用于 1 行,而不是该状态的所有行。(现在要处理它是一个唯一标识符字段的事实)

于 2012-08-18T17:31:46.737 回答