SQL Server基于isActive条件生成firstDevice、secondDevice列的查询需求
SQL Server 查询解决方案
你可以使用条件判断+聚合的方式实现行转列得到目标结果,假设你的原表名为device_tb,替换为实际表名即可使用以下语句:
SELECT Id, name, MAX(CASE WHEN isActive = 1 THEN device END) AS firstDevice, MAX(CASE WHEN isActive = 0 THEN device END) AS secondDevice FROM device_tb GROUP BY Id, name
逻辑说明
- 首先通过
CASE WHEN做分支判断:isActive为1时返回当前行的device值给firstDevice的临时结果,为0时返回给secondDevice的临时结果,不符合条件的位置默认返回NULL - 再通过
MAX聚合函数合并同一个Id、name分组下的非空值,最终得到每个Id对应两条设备字段的完整记录 - 如果每个Id、name组合下
isActive=1和isActive=0的记录最多只有1条,用MIN替代MAX也可以得到相同结果
样例验证
如果你的原表存在以下两条数据:
| Id | name | device | isActive |
|---|---|---|---|
| 1 | Motorola | phone | 1 |
| 1 | Motorola | tablet | 0 |
执行上述查询后将得到你要求的输出:
| Id | name | firstDevice | secondDevice |
|---|---|---|---|
| 1 | Motorola | phone | tablet |
内容的提问来源于stack exchange,提问作者hello
相关产品推荐
相关产品推荐

