如何解决在 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 举报,一经查实,本站将立刻删除。