sql 2005 多行变一行

houjian888 2011-10-06 04:13:19
问个数据库问题
如何把
id 项目 结果 日期
1 a 123 2011
2 b 234 2011
3 c 345 2011
4 d 456 2010
5 e 567 2009


6 a 123 2011
7 b 234 2011
8 c 345 2011
9 d 456 2010
10 e 567 2009

1 a 123 2011 2 b 234 2011 3 c 345 2011 4 d 456 2010 5 e 567 2009
6 a 123 2011 7 b 234 2011 8 c 345 2011 9 d 456 2010 10 e 567 2009

唯一能区别开的 就是项目 因为项目就 abcde 这五项 不知道怎么写SQL语句还请指教





...全文
101 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xiangaylian 2011-10-07
  • 打赏
  • 举报
回复
这样改进一下吧,但必须保证id自增、连贯:

CREATE TABLE #TB1(id INT, 项目 VARCHAR(10), 结果 VARCHAR(10), 日期 VARCHAR(10))
INSERT INTO #TB1
SELECT '1', 'a', '123', '2011' UNION ALL
SELECT '2', 'b', '234', '2011' UNION ALL
SELECT '3', 'c', '345', '2011' UNION ALL
SELECT '4', 'd', '456', '2010' UNION ALL
SELECT '5', 'e', '567', '2009' UNION ALL
SELECT '6', 'a', '123', '2011' UNION ALL
SELECT '7', 'b', '234', '2011' UNION ALL
SELECT '8', 'c', '345', '2011' UNION ALL
SELECT '9', 'd', '456', '2010' UNION ALL
SELECT '10', 'e', '567', '2009';

declare @count int --你想把多少个结果作为一行
set @count = 5
select id / @count as id,
result = (select ' ' + 项目 + ' ' + 结果 + ' ' + 日期 from #tb1 tb where tb.id > @count * t.id / @count - @count and tb.id <= @count * t.id / @count for xml path(''))
from #tb1 t where id % @count = 0
/*---------------结果---------------------
1 a 123 2011 b 234 2011 c 345 2011 d 456 2010 e 567 2009
2 a 123 2011 b 234 2011 c 345 2011 d 456 2010 e 567 2009
*/
qgqch2008 2011-10-06
  • 打赏
  • 举报
回复
CREATE TABLE TB(id INT, 项目 VARCHAR(10), 结果 VARCHAR(10), 日期 VARCHAR(10))
INSERT INTO dbo.TB
SELECT '1', 'a', '123', '2011' UNION ALL
SELECT '2', 'b', '234', '2011' UNION ALL
SELECT '3', 'c', '345', '2011' UNION ALL
SELECT '4', 'd', '456', '2010' UNION ALL
SELECT '5', 'e', '567', '2009' UNION ALL
SELECT '6', 'a', '123', '2011' UNION ALL
SELECT '7', 'b', '234', '2011' UNION ALL
SELECT '8', 'c', '345', '2011' UNION ALL
SELECT '9', 'd', '456', '2010' UNION ALL
SELECT '10', 'e', '567', '2009';

SELECT
MAX(CASE WHEN 项目='a' THEN id END),
MAX(CASE WHEN 项目='a' THEN 项目 END),
MAX(CASE WHEN 项目='a' THEN 结果 END),
MAX(CASE WHEN 项目='a' THEN 日期 END),
MAX(CASE WHEN 项目='b' THEN id END),
MAX(CASE WHEN 项目='b' THEN 项目 END),
MAX(CASE WHEN 项目='b' THEN 结果 END),
MAX(CASE WHEN 项目='b' THEN 日期 END),
MAX(CASE WHEN 项目='c' THEN id END),
MAX(CASE WHEN 项目='c' THEN 项目 END),
MAX(CASE WHEN 项目='c' THEN 结果 END),
MAX(CASE WHEN 项目='c' THEN 日期 END),
MAX(CASE WHEN 项目='d' THEN id END),
MAX(CASE WHEN 项目='d' THEN 项目 END),
MAX(CASE WHEN 项目='d' THEN 结果 END),
MAX(CASE WHEN 项目='d' THEN 日期 END),
MAX(CASE WHEN 项目='e' THEN id END),
MAX(CASE WHEN 项目='e' THEN 项目 END),
MAX(CASE WHEN 项目='e' THEN 结果 END),
MAX(CASE WHEN 项目='e' THEN 日期 END)
FROM dbo.TB GROUP BY id/6;
DROP TABLE dbo.TB;
/*
----------- ---------- ---------- ---------- ----------- ---------- ---------- ---------- ----------- ---------- ---------- ---------- ----------- ---------- ---------- ---------- ----------- ---------- ---------- ----------
1 a 123 2011 2 b 234 2011 3 c 345 2011 4 d 456 2010 5 e 567 2009
6 a 123 2011 7 b 234 2011 8 c 345 2011 9 d 456 2010 10 e 567 2009
警告: 聚合或其他 SET 操作消除了空值。

(2 行受影响)
*/
xiangaylian 2011-10-06
  • 打赏
  • 举报
回复
if object_id('tb') is not null
drop table tb
go

create table tb(id int identity(1,1),项目 nvarchar(10),结果 nvarchar(10),日期 nvarchar(4))
go

insert into tb(项目,结果,日期)
select 'a','123','2011' union all
select 'b','234','2011' union all
select 'c','345','2011' union all
select 'd','456','2010' union all
select 'e','567','2009'

select result =
(select ' ' + 项目 + ' ' + 结果 + ' ' + 日期 from tb for xml path(''))

--------------------------结果-----------------------------
/*--
a 123 2011 b 234 2011 c 345 2011 d 456 2010 e 567 2009
--*/
houjian888 2011-10-06
  • 打赏
  • 举报
回复
问个数据库问题
如何把表中的数据
id 项目 结果 日期
1 a 123 2011
2 b 234 2011
3 c 345 2011
4 d 456 2010
5 e 567 2009
一共五行 变成一行 如
1 a 123 2011 2 b 234 2011 3 c 345 2011 4 d 456 2010 5 e 567 2009

6 a 123 2011
7 b 234 2011
8 c 345 2011
9 d 456 2010
10 e 567 2009
一共五行 变成一行 如
6 a 123 2011 7 b 234 2011 8 c 345 2011 9 d 456 2010 10 e 567 2009

唯一能区别开的 就是项目 因为项目就 abcde 这五项 不知道怎么写SQL语句还请指教

人称猪 2011-10-06
  • 打赏
  • 举报
回复
同楼上
MSDNXGH 2011-10-06
  • 打赏
  • 举报
回复
不清楚,你想问什么
houjian888 2011-10-06
  • 打赏
  • 举报
回复
但是 结果都不是 我想要的结果 所以才跑这里来请教的
苏二 2011-10-06
  • 打赏
  • 举报
回复
请百度,行转列
houjian888 2011-10-06
  • 打赏
  • 举报
回复
在线等 还请各位多多指教
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2011-10-06 04:13
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。