首页 > 解决方案 > 查找不可能的行和列组合

问题描述

基于 SQL Server,我有多行多列。每行包含一个产品配置,该配置至少在一列中不同。现在我需要知道哪些是不存在的配置。这三列只是一个示例,以使其更易于理解。

数据示例:

产品 尺寸 颜色
衬衫 小号 红色的
衬衫 小号 蓝色的
衬衫 小号 黑色的
衬衫 红色的
衬衫 蓝色的
衬衫 大号 黄色的

结果,缺少这些配置:

产品 尺寸 颜色
衬衫 小号 黄色的
衬衫 黑色的
衬衫 黄色的
衬衫 大号 红色的
衬衫 大号 蓝色的
衬衫 大号 黑色的

标签: sqlsql-server

解决方案


您可以使用cross join来生成所有行。然后过滤掉存在的那些:

select p.product, s.size, c.color
from (select distinct product from t) p cross join
     (select distinct size from t) s cross join
     (select distinct color from t) c left join
     t
     on p.product = t.product and
        s.size = t.size and
        c.color = t.color
where t.product is null;

推荐阅读