输入数据:
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
答案 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;