2016-06-25 179 views
0

我有一个表:复杂查询

Number | Name 
__________________ 

100  | A 
101  | B 
102  | C 
103  | D 
104  | E 
..................  
105  | F 
106  | G 
108  | I 
109  | J 
..................  
110  | K 
111  | L 
114  | O 
.................. 
115  | P 
116  | Q 
...  | ... 

Number 0。4和其他字符是相同的是在一组,而那些有5间最后一个字符的所有行.. 9在另一个组中。这类团体在此表:

Group 100 
    Group 105 
    Group 110 
    Group 115 
    Group ... 

我怎样才能找到不全组(缺少的成员)?

对于以上(显示为一个例子)表,结果是:

Group 105 [missing members: 107] 
    Group 110 [missing members: 112,113] 
+0

你想只用SQL来产生这样的输出吗? – YakovL

回答

0

这里是你如何能做到这

-- sample data 
; with tbl as 
(
    select Number = 100 union all 
    select Number = 101 union all 
    select Number = 102 union all 
    select Number = 103 union all 
    select Number = 104 union all 
    select Number = 105 union all 
    select Number = 106 union all 
    select Number = 108 union all 
    select Number = 109 union all 
    select Number = 110 union all 
    select Number = 111 
), 
-- number tables (here you only required 0 to 4 as you are grouping by 5) 
num as 
(
    select n = 0 union all 
    select n = 1 union all 
    select n = 2 union all 
    select n = 3 union all 
    select n = 4 
) 
-- the query 
select [Group] = t.Number/5 * 5, misisng = max(stuff(m.missing, 1, 1, '')) 
from tbl t 
    cross apply 
    (
     select ',' + convert(varchar(10), (t.Number/5 * 5) + n) 
     from num 
     where not exists 
      (
       select * 
       from tbl x 
       where x.Number = (t.Number/5 * 5) + n 
      ) 
     order by n 
     for xml path('')    
    ) m (missing) 
where m.missing is not null 
group by t.Number/5 * 5 

- 如果你想在mssing使用此查询no in separate lines - 查询 选择不同[Group] = t.Number/5 * 5,m.missing from tbl t 交叉应用 ( 选择缺失=(t.Number/5 * 5)+ n的NUM 其中不存在 ( SELECT * 从TBL X 其中x.Number =(t.Number/5 * 5)+ N ) )米 其中m.missing不为空

+0

它不起作用! – daiphuniadea

+0

@daiphuniadea,请详细说明什么不起作用? – Squirrel

+0

对不起,它工作正常。我怎么能得到这个结果在单独的记录,平均组110在两个记录。谢谢 – daiphuniadea

0

它工作正常。

Group 105 [missing members: 107] 
Group 110 [missing members: 112,113] 

我怎么能得到这个结果在单独的记录,平均组110在两个记录。 是这样的:

Group 105 [missing member: 107] 
Group 110 [missing member: 112] 
Group 110 [missing member: 113]