首页 > 解决方案 > 返回 SQL 中行上所有可能的值组合

问题描述

如何返回行中所有值组合的列表?预期的输入和结果将在 T-SQL 中如下所示,

   Id          Category        Value
  ----        --------      --------
Source1        Company        GreenChef
source1        Company        Chef-client
source1        Role           Master
source1        Level          key1
source1        Level          key2
source1        Level          key3

预期的结果将是这样的。

Id        Company     Level       Role 
--        -------     -----      ------
source1   GreenChef   Key1       Master 
source1   GreenChef   Key2       Master
source1   GreenChef   Key3       Master
Source1   Chef-client Key1       Master
Source1   Chef-client Key2       Master
Source1   Chef-client Key3       Master

标签: sqlsql-server

解决方案


如果您知道 中的值category,则这是笛卡尔积。但是,您可能想要每个 id

select i.id, c.company, r.role, l.level
from (select distinct id
      from t
     ) i left join
     (select distinct id, value as company
      from t
      where category = 'Company'
     ) c
     on c.id = i.id left join
     (select distinct id, value as role
      from t
      where category = 'Role'
     ) r 
     on r.id = i.id left join
     (select distinct id, value as level
      from t
      where category = 'Level'
     ) l
     on l.id = i.id;

这从一个完整的 id 列表开始,这可能只是一种方便。它使用left join,因此它将返回所有 id,即使是那些缺少角色之一的。

如果您不知道所有类别,仍然可以使用递归 CTE 解决问题。为此,我建议提出一个问题。


推荐阅读