如何关联两张表统计符合采购协议条件的交易ID数量?
解决方案(SSMS SQL实现)
方法1:INNER JOIN(先去重协议表)
采购协议表存在重复的Product Type+Client ID记录,先去重再关联交易表,避免交易ID被重复统计:
SELECT pa.[Product Type], pa.[Client ID], COUNT(t.[Transaction ID]) AS 交易数量 FROM (SELECT DISTINCT [Product Type], [Client ID] FROM [Purchasing Agreements]) pa INNER JOIN [Transactions] t ON pa.[Product Type] = t.[Product Type] AND pa.[Client ID] = t.[Client ID] GROUP BY pa.[Product Type], pa.[Client ID] ORDER BY pa.[Product Type], pa.[Client ID]
方法2:WHERE EXISTS(大数据量更高效)
用EXISTS判断当前交易的产品和客户是否在协议表中存在,自动忽略协议表的重复记录:
SELECT [Product Type], [Client ID], COUNT([Transaction ID]) AS 交易数量 FROM [Transactions] t WHERE EXISTS ( SELECT 1 FROM [Purchasing Agreements] pa WHERE pa.[Product Type] = t.[Product Type] AND pa.[Client ID] = t.[Client ID] ) GROUP BY [Product Type], [Client ID] ORDER BY [Product Type], [Client ID]
关键说明
- 两种方法都会返回你需要的维度(产品类型、客户ID)和对应的交易计数,结果直接对应你要的数据透视表结构,可直接导出使用。
- 之前Excel透视表出错的原因:多字段关联时,Excel无法自动处理协议表的重复值,导致计数逻辑混乱;用SQL先做精确筛选再分组统计,能彻底规避这个问题。
内容的提问来源于stack exchange,提问作者Areth
相关产品推荐
相关产品推荐

