我有一组数据
name
AASADF2
AASADF3
ADSFFD2
ADSFFD3
AAWFWEF
SFASFSF
ADAQWEW
ASDAWFA
FSDGFRG
AFWEFR2
AFWEFR3
我想检索名称以2或3结尾的数据,而且前6个字符应匹配
i.e
AASADF2
AASADF3
ADSFFD2
ADSFFD3
AFWEFR2
AFWEFR3
我能够使用自连接垂直显示数据
AASADF2 AASADF3
ADSFFD2 ADSFFD3
AFWEFR2 AFWEFR3
但是我想要水平格式
AASADF2
AASADF3
ADSFFD2
ADSFFD3
AFWEFR2
AFWEFR3
我们是否需要为此创建临时表才能达到这种格式 有什么想法吗?
答案 0 :(得分:1)
这是您想要的吗?
select t.*
from table t
where right(nm, 1) in ('2', '3') and
exists (select 1 from table t1 where left(t1.nm, 6) = left(t.nm, 6))
答案 1 :(得分:0)
SELECT distinct t1.field FROM TABLE t1 JOIN TABLE t2
ON t1.field != t2.field
AND RIGHT(t1.field,1 ) IN ('2', '3')
AND LEFT(t1.field, 6) = LEFT(t2.field,6);
-*********************************************
这是为您提供的完整示例
DECLARE @table TABLE
(
field nvarchar(10)
)
insert @table (field) values ('AASADF2'),
('AASADF3'),
('ADSFFD2'),
('ADSFFD3'),
('AAWFWEF'),
('SFASFSF'),
('ADAQWEW'),
('ASDAWFA'),
('FSDGFRG'),
('AFWEFR2'),
('AFWEFR3');
SELECT distinct t1.field FROM @table t1 JOIN @table t2
ON t1.field != t2.field
AND RIGHT(t1.field,1 ) IN ('2', '3')
AND LEFT(t1.field, 6) = LEFT(t2.field,6)
输出
field
----------
AASADF2
AASADF3
ADSFFD2
ADSFFD3
AFWEFR2
AFWEFR3
(6 row(s) affected)
答案 2 :(得分:0)
一种方法使用窗口函数:
select t.*
from (select t.*, count(*) over (partition by left(t.field, 6)) as cnt
from t
) t
where cnt > 1 and field like '%[23]';
答案 3 :(得分:0)
我能够检索部分结果, 如果我们检查count> 1会显示我想要的结果,则使用以下查询
;使用cte作为 (从t_name t1中选择t1.name
其中子字符串(t1.name,8,1)在 ( 从t_name t2中选择子字符串(t2.name,8,1) 哪里 substring(t2.name,8,1)='2' 或子字符串(t2.name,8,1)='3' ) )
B2018BT2 1 B2018BU2 1 B2018BV2 1 B2018BW2 1 B2018BX2 1 B2018BY2 1 B2018BZ2 1 B2020AA2 2 B2020AA3 2 B2020AB2 2 B2020AB3 2 B2020AC2 2 B2020AC3 2
有人可以建议如何对count> 1进行文件处理吗?