2013-02-23 142 views
1

我有一个具有以下信息的表格:SQL选择匹配的行成两列,每一列都匹配

MatchID DataID Data 
1  100 info1 
1  101 info2 
2  102 info3 
2  103 info4 
2  104 info5 
3  105 info6 
3  106 info7 
3  107 info8 
3  108 info9 

我需要的结果是在两列一排每个匹配的ID查找像这样:

MatchID DataID1 Data1 DataID2 Data2 
    1  100  info1 101  info2 
    2  102  info3 103  info4 
    2  102  info3 104  info5 
    2  103  info4 104  info5 
    3  105  info6 106  info7 
    3  105  info6 107  info8 
    3  105  info6 108  info9 
    3  106  info7 107  info8 
    3  106  info7 108  info9 
    3  107  info8 108  info9 

任何援助将不胜感激。

+0

你尝试过这么远吗?最简单的将加入到自己的表... – 2013-02-23 00:49:52

+0

我已经尝试了连接...但为了使示例简单我用ID为ID,但我使用GUID的ID(而不是int) – JDaniels57 2013-02-23 00:54:34

回答

5

您可以通过使用连接做到这一点:

select t1.matchid, t1.dataid, t1.data, t2.dataid, t2.data 
from t t1 join 
    t t2 
    on t1.matchid = t2.matchid and 
     t1.dataid < t2.dataid 
+0

我有尝试了连接......但为了简化示例,我使用了int作为ID,但是我使用GUID作为ID(而不是int) – JDaniels57 2013-02-23 00:57:06

+0

@ JDaniels57。 。 。您仍然可以使用“<”比较GUID,所以这应该仍然有效。这在这里明确说明(http://msdn.microsoft.com/en-us/library/ms187942(v=sql.100).aspx)。 – 2013-02-23 01:04:37

+0

是的,谢谢大家 – JDaniels57 2013-02-23 01:37:43