CustomerID payerorder payername
00001 1 root
00001 2 spade
00001 9 ginny
00002 1 spade
00002 3 root
00002 9 ginny
00003 9 ginny

结果我想要:

CustomerID payerorder payername
000003 9 ginny

我正在试图拉客户,只有付款令9付款人名称金妮,他们不能有任何其他付款令附加到他们.我遇到的问题是,所有客户都有一个支付者订单9,支付者名字是金妮.正如您所看到的,帐单并不总是一个简单的1-8列表,因为根据如何将其输入系统,他们可能不使用帐单2,而是跳到帐单3.我应该如何抓取帐单9付款人姓名为Ginny的客户?我会说金妮在SQL中是不需要的,因为付款人第9号命令永远是付款人的名字金妮.

我确实试过这样做:

WHERE payerorder < 9 AND payername is NULL 

这最终不起作用,它只会拉出一行具有支付者订单但支付者姓名为空的行,但当我判断配置文件时,客户仍有其他支付者订单,如1,3,5具有支付者姓名.

我还试过:

payerorder = 9 and payername = ginny 

但问题是,每个人都有9号支付单,支付者的名字是金妮.我只需要拉那些只有9号支付者和支付者名字金妮的客户.

编辑:new post with updated information

推荐答案

一种方法是使用EXISTS来判断该客户端不存在值不是9的行:

SELECT DISTINCT
       YT.CustomerID,
       YT.payerorder,
       YT.payername
FROM dbo.YourTable YT
WHERE YT.payerorder = 9
  AND NOT EXISTS (SELECT 1
                  FROM dbo.YourTable E
                  WHERE E.payername= YT.payername
                    AND E.payerorder <> 9);

另一种方法是使用HAVING来判断MINMAX的值都是9:

SELECT MAX(YT.CustomerID_,
       MAX(YT.payerorder) AS payerorder,
       YT.payername AS payername
FROM dbo.YourTable YT
GROUP BY YT.payername
WHERE MAX(YT.payerorder) = 9
  AND MIN(YT.payerorder) = 9;

Sql相关问答推荐

SQL查询以创建手头的流动余额?

BigQuery`喜欢ANY‘和`不喜欢ANY’

更新在两个或多个面中具有交点的面

通过对象分离实现原子性

如果另一个表中不存在值列,则插入失败

改进的SQL子字符串提取

在WHERE EXISTS子查询中,列返回是否重要?

SQL仅返回第一个字母在A-Z之间的值

如何判断小数点后千位是否不为0

从另一个没有公共键的表中获取值来加入

删除对 JSON 数据的未解析引用的 SQL71502 警告

将最近的结束日期与开始日期相匹配

SQL 如何根据当前事件和下一个事件确定操作的持续时间?

什么是 100.它与 100 有什么区别?

Postgres存在限制问题「小值」

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

以 15 分钟为间隔的使用情况SQL 查询

在 MS Access 中连接相关记录

如何计算每行出现的次数并显示在另一个表中?

如何比较同一张表中的行并进行相应更新