2013-12-08 2 views
0

проблемы, которую я пытаюсь решить, чтобы знать, как часто комбинация будет больше появляться в том же RegistrationID и значение limitid из 33 и 5.Лучшего способ вхождения строк на основе того же идентификатор

Это пара Строки, которые у меня есть в таблице базы данных SQL:

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

В этой таблице может иметься 0, 1 или два значения. Ищу для случая, когда regsitrationId имеет два значения и поместить соответствующие limitid (совмест с RegistrationID) в наборе результатов, как:

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 годов которые разделены между ними.

EDIT:

Если вы не хотите, чтобы каждый 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

Большое спасибо за усилия, но это не то, что я хочу. Мне нужна одна строка с ограничениями и registerId. Ваш результат - две строки. – Roger

+0

У вас было два ряда в ожидаемом вами результате, поэтому я предположил, что вы так хотели. Тогда что вы хотите иметь в третьем столбце? Сколько раз это происходит? Ничего? Случайный идентификатор регистрации? –

+0

В одной строке у меня: registrationid 3712, limitid = 33. Во втором ряду у меня есть регистрационный номер 3712 и limitid = 5. В результирующей строке я хочу иметь 3 colomns: registrationid и оба limitid's. Надеюсь, что это поможет объяснить это. – Roger

Смежные вопросы