sql合并多条数据

用来个人记录

权限展示时遇到角色对应显示权限菜单使用了FOR XML PATH

SELECT  DISTINCT T.COl1
,STUFF(( SELECT  ',' + T1.COL1
                FROM  table1 T  WHERE   T.COL1=T1.COL1
              FOR XML PATH('')
              ), 1, 1, '') AS MUNELIST
,T.ISDEL
FROM  Table T1


展示结果

### 使用 `CASE` 表达式合并多个 `UPDATE` 语句 在 SQL Server 中,可以使用 `CASE` 表达式将多个 `UPDATE` 语句合并一条语句。这种方式适用于对同一表中不同条件下的记录进行更新。例如,对多个 `id` 值设置不同的字段值: ```sql UPDATE tb_account SET user_name = CASE WHEN id = 100 THEN 'michael' WHEN id = 200 THEN 'michael2' ELSE user_name END, age = CASE WHEN id = 100 OR id = 200 THEN 18 ELSE age END, birthday = CASE WHEN id = 100 OR id = 200 THEN NULL ELSE birthday END WHERE id IN (100, 200); ``` 这种方式减少了多次与数据库的交互,提高了执行效率[^1]。 --- ### 使用 `GROUP_CONCAT` 或 `STRING_AGG` 合并多行数据 在 MySQL 中,可以通过 `GROUP_CONCAT` 函数将多行数据合并为一行;在 SQL Server 中,则可以使用 `STRING_AGG` 函数实现类似功能。这适用于将多个值合并为一个字符串的场景。 例如,在 MySQL 中: ```sql SELECT task_id, GROUP_CONCAT(log_date SEPARATOR ', ') AS log_dates FROM task_logs GROUP BY task_id; ``` 在 SQL Server 中: ```sql SELECT task_id, STRING_AGG(log_date, ', ') AS log_dates FROM task_logs GROUP BY task_id; ``` 此外,结合 `CASE` 表达式还可以对数据进行进一步的描述转换,例如将数值映射为可读性更高的字符串: ```sql SELECT t.news_id, GROUP_CONCAT(t.sentiment_label) AS '情感', GROUP_CONCAT( CASE WHEN t.sentiment_label = 1 THEN '负面' WHEN t.sentiment_label = 2 THEN '中性' ELSE '正面' END ) AS '情感描述' FROM tbm_popular_feelings t WHERE t.sentiment_label IS NOT NULL AND t.create_time BETWEEN '2021-01-10 09:55:00' AND '2021-01-14 09:55:00' GROUP BY t.news_id; ``` 该方法提升了数据的可读性和展示效果[^3]。 --- ### 使用 `UNION` 或 `UNION ALL` 合并多个 `SELECT` 语句 当多个 `SELECT` 查询返回相同结构的数据时,可以使用 `UNION` 或 `UNION ALL` 合并一条语句。其中,`UNION` 会自动去除重复的行,而 `UNION ALL` 会保留所有行。 例如: ```sql SELECT column1 FROM table1 UNION SELECT column1 FROM table2; ``` 如果望保留所有结果,包括重复的行,则使用 `UNION ALL`: ```sql SELECT column1 FROM table1 UNION ALL SELECT column1 FROM table2; ``` --- ### 使用子查询合并多个查询 如果需要在一个查询中引用另一个查询的结果,可以使用子查询。例如,从 `users` 表中获取用户信息,并同时获取每个用户的订单数量: ```sql SELECT name, (SELECT COUNT(*) FROM orders WHERE orders.user_id = users.id) AS order_count FROM users; ``` 这种方式允许在主查询中嵌套子查询,从而减少多次查询的开销。 --- ### 使用 `JOIN` 操作合并多个表的数据 如果需要将多个表的数据关联在一起,可以使用 `JOIN` 操作来合并查询。例如,将 `users` 表和 `orders` 表关联,获取用户的订单信息: ```sql SELECT users.name, orders.order_date FROM users JOIN orders ON users.id = orders.user_id; ``` 通过 `JOIN`,可以将多个表中的相关数据合并为一个结果集。 --- ### 相关问题 1. 如何在 SQL Server 中使用 `CASE` 表达式合并多个 `UPDATE` 语句? 2. 在 MySQL 中如何使用 `GROUP_CONCAT` 合并多行数据? 3. `UNION` 和 `UNION ALL` 在合并 `SELECT` 语句时的区别是什么? 4. 如何通过子查询优化 SQL 查询? 5. `JOIN` 操作在合并多个表数据时的应用场景有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值