如何在给定条件下隔离数据?

时间:2017-06-14 13:00:28

标签: sql sas

输入数据:

CUST    CHANNEL
A        ATM
B        POS
C        MOB
A        ATM
A        ATM
C        ATM
B        ATM

所以我想要那些只使用atm的客户,那只是A。 输出数据:

CUST     CHANNEL
A         ATM
A         ATM
A         ATM

2 个答案:

答案 0 :(得分:0)

如果我正确理解了这一要求,您需要一个使用CHANNEL = ATM但不使用其他渠道的所有客户的列表。

这应该可以解决问题:

SELECT
    CUST
FROM
    MyTable
WHERE 
    CHANNEL = 'ATM' 
    AND CUST NOT IN (SELECT DISTINCT CUST FROM MyTable WHERE CHANNEL != 'ATM')

最后一行中的子查询构建了包含使用其他渠道的任何客户的表的子集。我们会将MyTable中使用CHANNEL = ATM的结果中的所有结果排除在外。

***更新评论后会发生错误

我重新创建了表,并运行了以下查询:

CREATE TABLE myTable 
(
    CUST char(1)
    , CHANNEL char(3)
)
;

INSERT INTO myTable
VALUES ('A', 'ATM')
, ('B', 'POS')
, ('C', 'MOB')
, ('A', 'ATM')
, ('A', 'ATM')
, ('B', 'ATM')
, ('C', 'ATM')
;

SELECT
    CUST
    , CHANNEL
FROM
    MyTable
WHERE 
    CHANNEL = 'ATM' 
    AND CUST NOT IN (SELECT DISTINCT CUST FROM MyTable WHERE CHANNEL != 'ATM')

这在SQL Server上顺利运行。

答案 1 :(得分:0)

为什么不使用SAS SQL语句?

proc sql;
  Select * from input_data 
    where cust = 'A' 
    and channel = 'ATM';
quit;