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

发布于 2022-09-01 17:59:09 字数 190 浏览 16 评论 0

假设表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 的记录。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假面具 2022-09-08 17:59:09

开窗函数when……case

∞觅青森が 2022-09-08 17:59:09

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文