现有表T1:
识别 关键词 内容
------------
张三
6 张三 中国
张三 中国北京2
李四 33通过过滤语句,得到如下效果:识别 关键词 内容
------------
6 张三 中国
李四 33即,如关键词字段中有二条以上是相同的,则过滤后只保留一条,但如果识别中带有“6”的,保留有“6”的那一条,其余删除掉。请问这该如何写?谢谢。
识别 关键词 内容
------------
张三
6 张三 中国
张三 中国北京2
李四 33通过过滤语句,得到如下效果:识别 关键词 内容
------------
6 张三 中国
李四 33即,如关键词字段中有二条以上是相同的,则过滤后只保留一条,但如果识别中带有“6”的,保留有“6”的那一条,其余删除掉。请问这该如何写?谢谢。
(
识别 INT ,
关键词 VARCHAR(10) ,
内容 VARCHAR(10)
)
INSERT INTO test
SELECT 6 ,
'张三' ,
'中国'
UNION ALL
SELECT NULL ,
'张三' ,
NULL
UNION ALL
SELECT NULL ,
'张三' ,
'中国北京2'
UNION ALL
SELECT NULL ,
'李四' ,
'33'
SELECT * FROM test a
WHERE 关键词 IN (
SELECT 关键词
FROM test
GROUP BY 关键词
HAVING COUNT(1)>1) AND 识别 IS NOT NULL
UNION ALL
SELECT * FROM test a
WHERE 关键词 IN (
SELECT 关键词
FROM test
GROUP BY 关键词
HAVING COUNT(1)=1)
/*
识别 关键词 内容
----------- ---------- ----------
6 张三 中国
NULL 李四 33
(2 行受影响)
*/
CREATE TABLE test
(
识别 INT ,
关键词 VARCHAR(10) ,
内容 VARCHAR(10)
)
INSERT INTO test
SELECT 6 ,
'张三' ,
'中国'
UNION ALL
SELECT NULL ,
'张三' ,
NULL
UNION ALL
SELECT NULL ,
'张三' ,
'中国北京2'
UNION ALL
SELECT NULL ,
'李四' ,
'33'
UNION ALL
SELECT NULL ,
'王五' ,
NULL
UNION ALL
SELECT NULL ,
'王五' ,
'中国北京2'
SELECT * FROM test a
where exists (
select 1
from test b
where b.关键词 = a.关键词
and b.识别 = 6
)
and not exists (
select 1
from test b
where b.关键词 = a.关键词
and b.识别 = 6
and isnull(a.识别,0) <> 6
)
or not exists (
select 1
from test b
where b.关键词 = a.关键词
and b.识别 = 6
)
and not exists (
select 1
from test b
where b.关键词 = a.关键词
and (isnull(b.识别,0)< isnull(a.识别,0)
or isnull(b.识别,0)= isnull(a.识别,0)
and isnull(b.内容,'')> isnull(a.内容,'')
)
)--结果
识别 关键词 内容
6 张三 中国
NULL 李四 33
NULL 王五 中国北京2
SELECT *
FROM test a
WHERE 关键词 IN ( SELECT 关键词
FROM test
GROUP BY 关键词
HAVING COUNT(1) > 1 )
AND 识别 IS NOT NULL
UNION ALL
SELECT *
FROM test a
WHERE 关键词 IN ( SELECT 关键词
FROM test
GROUP BY 关键词
HAVING COUNT(1) = 1 )
CREATE TABLE test
(
识别 INT ,
关键词 VARCHAR(10) ,
内容 VARCHAR(10)
)
INSERT INTO test
SELECT 6 ,
'张三' ,
'中国'
UNION ALL
SELECT 3 ,
'张三' ,
NULL
UNION ALL
SELECT NULL ,
'张三' ,
'中国北京2'
UNION ALL
SELECT NULL ,
'李四' ,
'33'
with yy as(
select 识别,关键词,内容,ROW_NUMBER() over(partition by 关键词 order by 识别 desc)ROW
from test )
select 识别,关键词,内容 from yy where ROW=1
结果
识别 关键词 内容
----------- ---------- ----------
6 ?三 中?
NULL 李四 33(2 row(s) affected)
因为是港版系统,有点乱码了