[英]Displaying only only orders where Customer has switched subscriptions
我正在查询一个Orders数据库,以显示哪些客户将订阅从高成本订阅切换到了低成本订阅。
每个月,对订阅进行计费并创建新记录。
我正在寻找的是这样的东西,但对于购买了AAAA和BBBB订阅的所有客户:
PRODUCT CODE: CUSTOMER NAME: BILL DATE:
AAAA Joey P. 2018-01-01
AAAA Joey P. 2018-02-01
BBBB Joey P. 2018-03-01
BBBB Joey P. 2018-04-01
在上述情况下,客户在两个月后转而使用便宜的订阅。
我想查询该表以包括所有切换订阅级别的客户。 但是,我被困在只能向购买者展示两种产品代码的情况下。 我的查询当前选择购买了一种或两种产品的所有客户。
SELECT DISTINCT [productcode] AS "PRODUCT CODE"
,[customername] AS "CUSTOMER NAME"
,[billdate] AS "BILL DATE"
FROM mydatabase
WHERE YEAR([billdate]) > 2017
AND ([productcode] = 'AAAA' OR [productcode] = 'BBBB')
我尝试过没有成功的自我加入。
请尝试以下方法:
;WITH [Data] AS (
SELECT m.customername,m.productcode,m.billdate
FROM mydatabase m
WHERE YEAR(m.[billdate]) > 2017
AND m.productcode IN ('AAAA','BBBB')
)
SELECT d.productcode AS [PRODUCT CODE]
,d.customername AS [CUSTOMER NAME]
,d.billdate AS [BILL DATE]
FROM (
SELECT m.customername
FROM [Data] m
GROUP BY m.customername
HAVING MAX(m.productcode) <> MIN(m.productcode)
) a
INNER JOIN [Data] d ON d.customername = a.customername
;
如果您只想切换客户 ,则可以使用聚合并having
:
SELECT customername
FROM mydatabase
WHERE YEAR([billdate]) > 2017 AND productcode IN ('AAAA', 'BBBB')
GROUP BY customername
HAVING COUNT(DISTINCT productcode) = 2;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.