我确定这对于t-sql专家来说非常简单。在查询中获取唯一结果
,我有以下结果从表
idMain IdSecondary TextValue
1 1 text1
1 2 text2
2 5 text3
2 6 text5
而且我想只获得idMain第一次出现。
结果应该是这样的。
idMain idSecondary TextValue
1 1 text1
2 5 text3
我该如何做到这一点?
我确定这对于t-sql专家来说非常简单。在查询中获取唯一结果
,我有以下结果从表
idMain IdSecondary TextValue
1 1 text1
1 2 text2
2 5 text3
2 6 text5
而且我想只获得idMain第一次出现。
结果应该是这样的。
idMain idSecondary TextValue
1 1 text1
2 5 text3
我该如何做到这一点?
您应该可以加入子查询,如下例所示。这是假设由“第一”你的意思是最低idSecondary
:
SELECT t.idMain, sub_t.minSecondary, t.textValue
FROM your_table t
JOIN (SELECT idMain, MIN(idSecondary) minSecondary
FROM your_table
GROUP BY idMain) sub_t ON (sub_t.idMain = t.idMain);
取决于你的意思是“第一”。通常这个词意味着datetime或时钟排序,但你的表没有一个日期或在它时间字段...
所以,你必须清楚你所说的“第一”
的意思如果你有没有存储在表中的某些值可以告诉查询处理器如何订购任意两条记录以区分“先”与“是”之间的任何意思,然后您就失去了运气......
假设你确实有这样一个领域(为了举例,假设它是IdSecondary
--因为你的样本结果看起来就是这种情况),那么你需要做的是
Select * From Table a
Where IdSecondary= (Select Min(IdSecondary)
From Table
Where idMain = a.idMain)
在这里找到了一个类似的案例http://stackoverflow.com/questions/715804/query-to-return-1-instance-of-a-record-with-duplicates,它竟然像一个魅力工作。感谢您的答案! – Bathan 2010-04-29 20:01:32
请注意,如果您对同一个'idMain'有不同的'TextValue',那么接受的答案建议的解决方案可能不适用于您,如示例中所示。请注意该帖子之间的区别,即相同的“ID”始终具有相同的“值”。 – 2010-04-29 20:04:28