SQL Server与CTE链接

时间:2017-01-19 01:14:40

标签: sql-server chaining

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查询的帮助都将不胜感激

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 :(得分: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

*/