我正在使用SQL Server 2008 R2。我确实在表格中有如下记录:
Id Sys Dia Type UniqueId
1 156 20 first 12345
2 157 20 first 12345
3 150 15 last 12345
4 160 17 Average 12345
5 150 15 additional 12345
6 157 35 last 891011
7 156 25 Average 891011
8 163 35 last 789521
9 145 25 Average 789521
10 156 20 first 963215
11 150 15 last 963215
12 160 17 Average 963215
13 156 20 first 456878
14 157 20 first 456878
15 150 15 last 456878
16 160 17 Average 456878
17 150 15 last 246977
18 160 17 Average 246977
19 150 15 additional 246977
关于此数据,这些记录是具有共同UniqueId的一类组。记录可以是"第一,最后,平均和附加"。现在,从这些记录我想选择"平均"记录类型,只有他们有"第一"或者"额外的"小组阅读。否则我想将它们从选择中排除..
预期结果是:
Id Sys Dia Type UniqueId
1 156 20 first 12345
2 157 20 first 12345
3 150 15 last 12345
4 160 17 Average 12345
5 150 15 additional 12345
6 157 35 last 891011
7 163 35 last 789521
8 156 20 first 963215
9 150 15 last 963215
10 160 17 Average 963215
11 156 20 first 456878
12 157 20 first 456878
13 150 15 last 456878
14 160 17 Average 456878
15 150 15 last 246977
16 160 17 Average 246977
17 150 15 additional 246977
简而言之,我不想选择类型="平均值"并且只有"最后"具有相同UniqueId的记录类型。任何解决方案?
答案 0 :(得分:2)
尝试这样的事情:
SELECT * FROM MyTable WHERE [Type] <> 'Average'
UNION ALL
SELECT * FROM MyTable T WHERE [Type] = 'Average'
AND EXISTS (SELECT * FROM MyTable
WHERE [Type] IN ('first', 'additional')
AND UniqueId = T.UniqueId)
第一个SELECT语句获取除Type ='Average'之外的所有记录。第二个SELECT语句只获得Type ='Average'记录,这些记录至少有一个具有相同UniqueId的记录,即'first'或'additional'类型。
答案 1 :(得分:2)
在相关子查询中使用EXISTS
运算符:
SELECT * FROM dbo.Table1 t1
WHERE [Type] != 'Average'
OR EXISTS (SELECT * FROM Table1 t2
WHERE t1.UniqueId = t2.UniqueId
AND t1.[Type] = 'Average'
AND t2.[Type] IN ('first','additional'))
<强> SQLFiddle DEMO 强>