2013-12-08 51 views
0

我试图解决的问题加入行的更好的方法是知道密码怎么会经常occure相同registrationid和33以及limitid值5基于相同的ID

这是一对夫妇我在SQL数据库表中有以下行:

 id limitid registrationid 
--------------------------------------- 
    113  33    3712 
    114  5    3712 
    116  33    3713 
    117  5    3713 
    1428  33    3714 
    1434  5    3720 

RegistrationId在此表中可以有0,1或2个值。 我要寻找其中regsitrationId有两个值的情况下,并(与registrationid一起)把相应limitid的结果集中,如:

limitid1 limitid2 registrationid 
------------------------------------------ 
      33   5    3712 

为了实现这个目标我使用这个SQL代码:

DECLARE @t TABLE(
    id int NOT NULL, 
    regid int NOT NULL, 
    limitid int not null 
); 
insert into @t 
SELECT Id, RegistrationId, limitid 
FROM  my-table 
WHERE  (LimitId = 33) 
ORDER BY RegistrationId 

DECLARE @t2 TABLE(
    id int NOT NULL, 
    regid int NOT NULL, 
    limitid int not null 
); 
insert into @t2 
SELECT Id, RegistrationId, limitid 
FROM  my-table 
WHERE  (LimitId = 5) 
ORDER BY RegistrationId 

declare @t3 Table(
    regid int NOT NULL, 
    limitid1 int not null, 
    limitid2 int not null 
); 
insert into @t3 
SELECT  t1.RegId, t1.limitid, t2.limitid 
FROM  @t as t1 
join @t2 as t2 
on t1.regid = t2.regid 

select * from @t3 

我的问题:是否有不同的/更好的方法来达到相同的结果?

谢谢!

+0

你应该更好地解释你正在尝试做什么。我不认为这很清楚。 –

+0

@FilipeSilva我编辑了我的问题。 – Roger

回答

0

我不是100%肯定我完全理解你,但你可以实现与输出:

SELECT t1.limitId AS limitid1,t2.limitId AS limitid2, t1.registrationID 
FROM myTable t1 
INNER JOIN myTable t2 ON t1.registrationID = t2.registrationID 
WHERE t1.limitID = 33 
    AND t2.limitID = 5; 

sqlfiddle demo

这给了你limitID1和limitID2的组合和registrationID的它们之间共享。

编辑:

如果你不想让每一个registrationID,你可以得到只有MIN(t1.registrationID):

SELECT t1.limitId AS limitid1, 
     t2.limitId AS limitid2, 
     MIN(t1.registrationID) AS Num_Records 
FROM myTable t1 
INNER JOIN myTable t2 ON t1.registrationID = t2.registrationID 
WHERE t1.limitID = 33 AND t2.limitID = 5 
GROUP BY t1.limitId,t2.limitId 

sqlfiddle demo

+0

非常感谢您的努力,但这不是我想要的。我需要一行limitid和registrationId。你的结果是两行。 – Roger

+0

你的预期结果中有两行,所以我认为你想这样。那么你想在第三栏中有什么?发生的次数?没有?随机注册ID? –

+0

在一行中我有:registrationid 3712,limitid = 33.在第二行中,我有registrationid 3712和limitid = 5。在结果行中,我想要3个colomns:registrationid和limitsid。希望有助于解释它。 – Roger