sql - 返回 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
解决方案
如果您知道 中的值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 解决问题。为此,我建议提出一个新问题。
推荐阅读
- unity3d - Unity-游戏收藏品不播放音效
- ruby - 具有日期字段变化的 Rails 6 模型,有时完成日期,其他只是年份
- database - 插入事务并更新帐户余额
- javascript - 将 Promise 转换为异步等待
- c++ - 前向函数定义变量时出错
- c - 为什么我会收到预期的标识符错误代码?
- javascript - 函数中的 switch 语句返回未定义
- javascript - 在循环通过material-ui评级组件时,'onChange'中'index'的值保持为0
- python - 如何用 Dask 和 Arima 并行化一个简单的函数?
- javascript - 为什么 onnegotiationneeded 只触发一次?