微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 t-sql 中可以使用一种 foreach 语句吗?

如何解决在 t-sql 中可以使用一种 foreach 语句吗?

我有这样的数据,我正在尝试基于 t-sql 制作一个表格,如果表格中包含付款类型为 23 和 26(CPR 123 就是这种情况)的行,我可以查看每个唯一的 CPR下面。

应该相当简单,但我是 t-sql 的新手,还没有找到解决方案。几年前使用 SAS 时,我依稀记得使用“foreach”语句来处理这样的事情。

任何帮助将不胜感激。

心肺复苏 付款方式
123 23
123 26
111 28
144 26
144 27

解决方法

以下是在或多或少的可移植 SQL 中执行此操作的方法。这是 GROUP BY ... HAVING 的工作。

SELECT CPR
  FROM tbl
 WHERE PaymentType IN (23,26)
 GROUP BY CPR
HAVING COUNT(*) = 2;

如果您正在寻找具有五分之三的 PaymentType 任意组合的商品,您可以这样做。

SELECT CPR
  FROM tbl
 WHERE PaymentType IN (23,26,28,50,31)
 GROUP BY CPR
HAVING COUNT(*) = 3;

这里的技巧是记住 SQL 是一种声明性语言,而不是一种过程语言。您描述了您需要的一组结果,SQL 会为您找出如何获得它。 foreach 是一种程序操作。

,

关于T-SQL是否支持ForEach

虽然没有 ForEach,但有类似的结构(如 WHILE 循环和 CURSOR 等)可用于模拟 ForEach 循环。但是,我建议您不要使用它们,除非您别无选择。

关于您的问题的解决方案

有很多方法。这是使用相关查询的一种简单方法:

SELECT DISTINCT CPR
FROM YourTable T
WHERE EXISTS(SELECT * FROM YourTable WHERE CPR = T.CPR AND Paymenttype = 23)
  AND EXISTS(SELECT * FROM YourTable WHERE CPR = T.CPR AND Paymenttype = 26)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。