tsql - 使用 T-SQL 转置两个文本列
解决方案
希望这会有所帮助。如果任何 ID 的培训课程超过 3 个,则不会出现多余的培训课程。
SELECT OrgDefinedID
, max(CASE WHEN row_num = 1 THEN attended END) Attendance1
, max(CASE WHEN row_num = 1 THEN training END) Training1
, max(CASE WHEN row_num = 2 THEN attended END) Attendance2
, max(CASE WHEN row_num = 2 THEN training END) Training2
, max(CASE WHEN row_num = 3 THEN attended END) Attendance3
, max(CASE WHEN row_num = 3 THEN training END) Training3
FROM
(SELECT row_number() over (partition by OrgDefinedID order by Attended, Training) as row_num, *
FROM T1) x
group by OrgDefinedID
在max()
做什么?我的第一次尝试是这个
SELECT OrgDefinedID
, (CASE WHEN row_num = 1 THEN attended END) Attendance1
, (CASE WHEN row_num = 1 THEN training END) Training1
, (CASE WHEN row_num = 2 THEN attended END) Attendance2
, (CASE WHEN row_num = 2 THEN training END) Training2
, (CASE WHEN row_num = 3 THEN attended END) Attendance3
, (CASE WHEN row_num = 3 THEN training END) Training3
FROM
(SELECT row_number() over (partition by OrgDefinedID order by Attended, Training) as row_num, *
FROM T1) x
几乎就在那里。我们只需要将多行折叠成一行
组织定义 ID | 出勤1 | 培训1 | 出勤2 | 培训2 | 出勤3 | 培训3 |
---|---|---|---|---|---|---|
13076 | 是的 | CPIE 在线培训工作室 | 空值 | 空值 | 空值 | 空值 |
13076 | 空值 | 空值 | 是的 | 爱迪 | 空值 | 空值 |
12505478 | 是的 | 最佳实践 3,上午 9 点 | 空值 | 空值 | 空值 | 空值 |
12505478 | 空值 | 空值 | 是的 | 更聪明地工作 II,#4 | 空值 | 空值 |
12505478 | 空值 | 空值 | 空值 | 空值 | 是的 | 量规设计 2 |
您可以看到,在给定的 OrgDefinedID 中,每一列都有一个非空值,而该列中的其他值是空的。因此,如果我们按 OrgDefinedID 分组并应用 max(),它将选择我们想要的非空值。请注意,像 max() 这样的聚合函数会忽略空值。所以添加 max() 函数并按 OrgDefinedID 分组,我们得到:
组织定义 ID | 出勤1 | 培训1 | 出勤2 | 培训2 | 出勤3 | 培训3 |
---|---|---|---|---|---|---|
13076 | 是的 | CPIE 在线培训工作室 | 是的 | 爱迪 | 空值 | 空值 |
12505478 | 是的 | 最佳实践 3,上午 9 点 | 是的 | 更聪明地工作 II,#4 | 是的 | 量规设计 2 |
推荐阅读
- spring - 返回 405 MethodNotAllowed 而不是 ResponseStatusException() 中指定的
- vba - 子表单验证(数据表视图)
- reactjs - 使用 React 进行转换 - 我应该使用 TransitionGroup 吗?
- python - 机器人框架正则表达式处理返回值:无
- java - Java中是否有支持按(非唯一)值查找键的映射?
- javascript - 为什么在构造函数中的方法之前需要“this”?
- ruby-on-rails - 在 ruby 中安排任务在每月的 15 日和最后一天工作
- python - Wxpython 应用程序图标
- javascript - 如何通过删除按钮删除产品?
- charts - Google Data Studio 中的折线图,其中 x 值根据其值间隔