合并具有相同ID的两行并创建新列

编程入门 行业动态 更新时间:2024-10-26 05:33:05
本文介绍了合并具有相同ID的两行并创建新列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我的阙是 i我在下面的数据表中获取数据

id date hours 1 22/7/13 4 1 23/7/13 5 10 22/7/13 4 10 23/7/13 3 11 24 / 7/13 8 6 25/7/13 8 6 26/7/13 8

i want以下表格中的数据

id 22/7/13 23/7/13 24/7/13 25/7/13 26/7/13 1 4 5 - - - 10 4 3 - - - 11 - - 8 - - 6 - - - 8 8

有人知道怎么做...请帮助

解决方案

是的,可以借助 PIVOT [ ^ ]。 在SQL查询中使用Pivot的简单方法 [ ^ ] 希望这会有所帮助。

试试这个:

SET DATEFORMAT dmy; CREATE TABLE #tmp(id INT ,日期 DATETIME ,小时 INT ) INSERT INTO #tmp(id, date ,hours) SELECT 1 ,' 22/07/2013', 4 UNION ALL SELECT 1 ,' 23/07/2013', 5 UNION ALL SELECT 10 ,' 22/07/2013 ', 4 UNION ALL SELECT 10 ,' 23/07/2013', 3 UNION ALL SELECT 11 ,' 24/07/2013', 8 UNION ALL SELECT 6 ,' 25/07/2013', 8 UNION ALL SELECT 6 ,' 26/07/2013', 8 DECLARE @cols VARCHAR ( 300 ) DECLARE @ dt VARCHAR ( 2000 ) DECLARE @ pt VARCHAR ( 4000 ) SET @cols = STUFF(( SELECT DISTINCT ' ],[' + CONVERT ( VARCHAR ( 10 ),O。 date , 121 ) FROM #tmp AS O ORDER BY ' ],[' + CONVERT ( VARCHAR ( 10 ),O 。 date , 121 ) FOR XML PATH(' ')), 1 , 2 ,' ' )+ ' ]' SET @ dt = N ' SELECT id,CONVERT(VARCHAR(10),date,121)AS date,hours FROM #tmp' EXEC ( @ dt ) SET @ pt = N ' SELECT id,' + @cols + ' ' + ' FROM(' + @ dt + ' )AS DT' + ' PIVOT(MAX(小时)FOR日期IN(' + @cols + ' ))AS PT' + ' ORDER BY id' EXEC ( @ pt ) DROP 表 #tmp

my que is i am getting data in datatable in below form

id date hours 1 22/7/13 4 1 23/7/13 5 10 22/7/13 4 10 23/7/13 3 11 24/7/13 8 6 25/7/13 8 6 26/7/13 8

i want this data in below form

id 22/7/13 23/7/13 24/7/13 25/7/13 26/7/13 1 4 5 - - - 10 4 3 - - - 11 - - 8 - - 6 - - - 8 8

can anyone know how to do this...pls help

解决方案

Yes its possible with help of PIVOT[^]. Simple Way To Use Pivot In SQL Query[^] Hope this helps.

Try this:

SET DATEFORMAT dmy; CREATE TABLE #tmp (id INT, date DATETIME, hours INT) INSERT INTO #tmp (id, date, hours) SELECT 1, '22/07/2013', 4 UNION ALL SELECT 1, '23/07/2013', 5 UNION ALL SELECT 10, '22/07/2013', 4 UNION ALL SELECT 10, '23/07/2013', 3 UNION ALL SELECT 11, '24/07/2013', 8 UNION ALL SELECT 6, '25/07/2013', 8 UNION ALL SELECT 6, '26/07/2013', 8 DECLARE @cols VARCHAR(300) DECLARE @dt VARCHAR(2000) DECLARE @pt VARCHAR(4000) SET @cols = STUFF((SELECT DISTINCT '],[' + CONVERT(VARCHAR(10),O.date,121) FROM #tmp AS O ORDER BY '],[' + CONVERT(VARCHAR(10),O.date,121) FOR XML PATH('')),1,2,'') + ']' SET @dt = N'SELECT id, CONVERT(VARCHAR(10),date,121) AS date, hours FROM #tmp' EXEC(@dt) SET @pt = N'SELECT id, ' + @cols + ' ' + 'FROM(' + @dt + ') AS DT ' + 'PIVOT(MAX(hours) FOR date IN(' + @cols + ')) AS PT ' + 'ORDER BY id' EXEC(@pt) DROP TABLE #tmp

更多推荐

合并具有相同ID的两行并创建新列

本文发布于:2023-07-22 10:29:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1186706.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:两行   ID

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!