SQL多行合并为一行,SQL语句如何写

把这样的数据合并为这样的通过相同的ID... 把这样的数据

合并为这样的

通过相同的ID
展开
 我来答
百度网友8d17b9d
推荐于2017-09-05 · TA获得超过280个赞
知道小有建树答主
回答量:161
采纳率:100%
帮助的人:181万
展开全部

最简捷直观的方法就是利用分组

select ID,
       Sum(语文) 语文,
       Sum(数学) 数学,
       Sum(英语) 英语   
  from scores
 group by ID

 你可以直接用下面的语句在SQL Server中测试结果:

DECLARE @ScoresVar table(
    ID int NOT NULL,
    Chinese int,
    Math int,
    English int);
    
Insert into @ScoresVar
values(1 ,70, null, null)
Insert into @ScoresVar
values(1 ,null,80, null)
Insert into @ScoresVar
values(1 ,null, null, 90)
Insert into @ScoresVar
values(2 ,75, null, null)
Insert into @ScoresVar
values(2 ,null,85, null)
Insert into @ScoresVar
values(2 ,null, null, 95)

  
select ID, 
       SUM(Chinese) Chinese, 
       Sum(Math) Math,
       Sum(English) English
  from @ScoresVar 
 group by ID

 还有一种方法,可能更通用一点,利用 FOR XML PATH 和STUFF函数来做,虽然复杂,但是对表的数据类型无限制。

还是上面的测试数据,你可以通过下面的代码来得到你想要的数据:

SELECT ID,
   STUFF((SELECT ',' + Cast(A.Chinese as varchar)
        FROM @ScoresVar A Where A.ID=B.ID FOR XML PATH('')),1,1,'') As Chinese,
    STUFF((SELECT ',' + Cast(A.Math as varchar)
        FROM @ScoresVar A Where A.ID=B.ID FOR XML PATH('')),1,1,'') As Math,
    STUFF((SELECT ',' + Cast(A.English as varchar)
        FROM @ScoresVar A Where A.ID=B.ID FOR XML PATH('')),1,1,'') As English  
  From @ScoresVar B
  Group By ID
-- 输出结果 
ID Chinese Math English
1     70     80     90
2     75     85     95
micro0369
2017-09-05 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4060万
展开全部
select id,max(语文) 语文,max(数学) 数学,max(英语) 英语
from tab
group by id
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式