2017-01-19 4 views
0
ID MatchID phone MPhone date Mdate 
----------------------------------------- 
C1 C2  1234 1234 5-Jan 1-Jan 
C2 C3  1234 1234 1-Jan 3-Jan 
C3 C4  1234 1234 3-Jan 4-Jan 

У меня есть набор данных, как показано выше, и я пытаюсь найти основную запись на основе номера телефона. если мы посмотрим на данные C1 = c2 = c3 = c4 на основе номеров телефонов. На основе Mdate (последняя дата 5-jan, поэтому C1 является основной записью). Я пытался с помощью cte фильтровать основную запись, присоединяясь к C1.phone = C2.Mphone. Любая помощь с запросом Select будут оцененыSQL Server chaining with CTE

output 
ID phone date Type 
----------------------------------------- 
C1 1234 5-Jan M 
C2 1234 1-jan NM 
C3 1234 3-jan NM 
c4 1234 4-Jan NM 

`

+1

Каков ваш ожидаемый результат? –

+0

Я планирую получить данные в таблице temp с идентификатором флага, чтобы различать основные и другие записи. Спасибо. В этом случае вывод будет C1, 1234,5-jan, 'Master' – lms

+0

Извините, я отвечал по ошибке нажатием клавиши ввода. – lms

ответ

0

Вам не нужно CTE для достижения этой цели. Пожалуйста, проверьте следующий вопрос:

declare @table table 
    (ID nvarchar(50), MatchID nvarchar(50), phone nvarchar(50), 
    MPhone nvarchar(50), [date] nvarchar(50), Mdate nvarchar(50)); 

insert into @table values 
('C1','C2','1234','1234','5-Jan','1-Jan'), 
('C2','C3','1234','1234','1-Jan','3-Jan'), 
('C3','C4','1234','1234','3-Jan','4-Jan'); 

SELECT ID, phone, [date], MatchID, 
     CASE WHEN EXISTS (SELECT MatchID from @table as b where b.MatchID = a.ID) 
      THEN 'NM' 
      ELSE 'M' 
     END as [Type] 
    FROM @table as a; 

/* OUTPUT 

ID phone date MatchID Type 
-- ----- ----- ------- ---- 
C1 1234 5-Jan C2  M 
C2 1234 1-Jan C3  NM 
C3 1234 3-Jan C4  NM 

*/ 
+0

Это действительно не решает проблему цепочки. Он просто говорит: «Есть еще одна запись с тем же идентификатором», но явно не «есть запись, которая через любую последовательность других идентификаторов является родителем этой записи». Я считаю, что, как указано выше, rCTE является правильным подходом здесь. – Xedni

+0

Согласитесь с вами Xedni, рекурсивный cte - это то, что мы ищем, спасибо – lms

+0

@Ims вам нужно предоставить другой набор данных образца. Учитывая данные выборки, данное решение действительно решает проблему, как опубликовано. – wdosanjos

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