假设表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 的记录。
假设表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 的记录。
为方便逻辑处理,见你两个字段中值根据逗号拆分为多行
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
开窗函数when……case