首页 > [SQL Server 2008]如何写出这个查询语句?

[SQL Server 2008]如何写出这个查询语句?

假设表Table有两个字段:

字段1有以下记录:A, A, A, B, B, C, C, C, C, D, D
字段2有以下记录:2, 6, 8, 1, 2, 4, 7, 5, 9, 8, 4

我想查询出,字段1 in (B, C, D) 并且 B对应的字段2大于2,C对应的字段2大于3,D对应的字段2大于4 的记录。


开窗函数when……case


为方便逻辑处理,见你两个字段中值根据逗号拆分为多行

SELECT tf1.iIndex, tf1.f1,tf2.f2 FROM (
   SELECT f1,f2,CONVERT(XML,'<r><n>'+REPLACE(f1,',','</n><n>')+'</n></r>')  AS xf1
           ,CONVERT(XML,'<r><n>'+REPLACE(f2,',','</n><n>')+'</n></r>')  AS xf2
   FROM #a AS a
) t CROSS APPLY (SELECT ROW_NUMBER()OVER(ORDER BY t.f1) AS iIndex, b.value('.','varchar(max)') AS f1 FROM t.xf1.nodes('r/n') AS s(b)) tf1
CROSS APPLY (SELECT ROW_NUMBER()OVER(ORDER BY t.f2) AS iIndex, b.value('.','varchar(max)') AS f2 FROM t.xf2.nodes('r/n') AS s(b)) tf2
WHERE tf1.iIndex=tf2.iIndex

输出结果:
iIndex f1 f2
1 A 2
2 A 6
3 A 8
4 B 1
5 B 2
6 C 4
7 C 7
8 C 5
9 C 9
10 D 8
11 D 4

【热门文章】
【热门文章】