【发布时间】:2014-11-04 20:51:17
【问题描述】:
我有以下数据:
示例:
create table vdata
(
cola varchar(10),
colb varchar(10)
);
insert into vdata values('A','B'),('B','C'),('A','X'),('Z','L'),
('N','M'),('O','P'),('R','Z'),('X','Y'),('T','N'),('F','E'),('G','H');
看起来像:
select * from vdata;
cola colb
--------------
A B
B C
A X
Z L
N M
O P
R Z
X Y
T N
F E
G H
注意:现在我只想显示 cola 必须出现在 colb 中的数据 OR colb必须出现在cola 中,我想添加列以根据下一条记录中存在的值显示每条记录的行号。
预期结果:
RowNumbers cola colb
------------------------
1 A B
1 A X
1 B C
2 N M
3 R Z
2 T N
1 X Y
3 Z L
上述结果的解释:第一行在开始时有行号1,然后再次分配给接下来的两条记录,因为column(cola or colb)中的任何一个都有值A or B所以。给第四条记录的行号2,因为它没有任何值A or B,并且以相同的方式继续处理。请注意,记录 7 的行号为 X and Y,其行号为 1,因为它与表中记录 2 处的 A 相关,即 A and X。
我的失败尝试:
SELECT
row_number() over(PARTITION BY cola order by cola) RowNumbers,
cola,
colb
FROM vdata
where cola in (select colb from vdata)
or colb in (select cola from vdata)
ORDER BY cola,colb
【问题讨论】:
-
如果 colb 中必须有可乐,那你怎么会在预期输出中得到“A”
-
@Pradeep,请再次阅读注意事项。
-
现在我明白了..
标签: sql-server sql-server-2008-r2