sql - 评估多行并汇总到新列
问题描述
我正在尝试评估列中的值以确定每个行子集的值。更容易解释...
select distinct
app_id,
asset_id,
asset_migration_scope
from
table
这是一个输出示例:
app_ID asset_id asset_migration_scope
123 asset1 Migrating
123 asset2 Migrating
123 asset3 Not Migrating
456 asset1 Migrating
456 asset2 Migrating
789 asset1 Not Migrating
789 asset2 Not Migrating
我想做的是创建第四列来汇总这些内容。如果给定应用程序 ID 的所有资产 = 正在迁移,则该应用程序 ID 的每一行的值都将为正在迁移。如果它是迁移/不迁移的混合体,我们将其称为混合。都是“不迁移”,那就是“不迁移”
输出如下所示:
app_ID asset_id asset_migration_scope app_migration_scope
123 asset1 Migrating Hybrid
123 asset2 Migrating Hybrid
123 asset3 Not Migrating Hybrid
456 asset1 Migrating Migrating
456 asset2 Migrating Migrating
789 asset1 Not Migrating Not Migrating
789 asset2 Not Migrating Not Migrating
如何进行此汇总,以便我们查看每个 app_id + asset_id 组合以及相应的asset_migration_scope 值,以根据 app_id 确定 app_migration_scope 列的单个值?
非常感谢提前!
解决方案
您可以将case
表达式与聚合一起使用:
SELECT t.app_id, t.asset_id, t.asset_migration_scope,
(CASE WHEN mn_scope <> mx_scope
THEN 'Hybrid'
WHEN (mn_scope = mx_scope AND mn_scope = 'Migrating')
THEN 'Migrating'
WHEN (mn_scope = mx_scope AND mn_scope = 'Not Migrating')
THEN 'Not Migrating'
END) AS app_migration_scope
FROM table t CROSS APPLY
(SELECT MIN(t1.asset_migration_scope) AS mn_scope, MAX(t1.asset_migration_scope) AS mx_scope
FROM table t1
WHERE t1.app_ID = t.app_ID
) t1;
但是,DISTINCT
由于您的示例数据不建议我使用DISTINCT
.
推荐阅读
- sorting - 击败模式的 Quicksort 与 Timsort?
- react-native - 在本机反应中在createDrawerNavigator项目上设置onpress?
- python - 将值重新分配给特定列并使用 pandas 与其余列合并
- resources - 使用基于代理的建模模拟有限的资源
- vim - 如何调试键绑定/命令行为的变化(
/ ctrl-p 为 ctrlp.vim vim 插件)? - excel - 按唯一 ID 和自动删除求和
- javascript - 如何获取用户输入并将其永久保存在变量中并在 window.open() 中使用该变量
- vue.js - 当我不使用 vue 文件时,如何在 vue 中拥有一个或非索引?
- python - 在熊猫数据框中将纪元列值转换为时间
- python - 使用 scipy.integrate.quad 时,增加正函数的界限会降低积分!如何解决?