同一组纪录,分列显示

seeQe 2009-10-13 10:00:39
由于碰到一个特别的问题,必须写一条或多条 sql 语句,如下:

有数据库记录 表T1:
序号 数据
1 x1
2 x2
3 x3
4 x4
5 x5
-->可以用此得到数据表: select s,c from T1


想写一条sql 语句,把上面5条数据分成两列显示:
序号 数据 序号 数据
1 x1 4 x4
2 x2 5 x5
3 x3

--> 可能的数据表 select s1,c1,s2,c2 from T1 这语句如何写? 非常感谢啊



...全文
221 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
seeQe 2009-10-15
  • 打赏
  • 举报
回复
小梁爱兰儿 的很特别一种,赞一个,我都想了半天才分解开去应用;
东塘西荷 的正统的,视图很清晰;
三月红梨,我都没有测试,但也谢谢的sql ,等过段时间会再来论道.

都很厉害,都有非凡之技,ok,下面送分了 :-) 看看能否多加点分


dtxh168 2009-10-14
  • 打赏
  • 举报
回复
select a.*,isnull(cast(b.序号 as varchar(5)),'') as 序号,isnull(b.数据,'') as 数据
from(select * from tb where (序号-1)/3=0)a
left join(select * from tb where (序号-1)/3=1)b
on a.序号%3=b.序号%3

/**
序号 数据 序号 数据
----- ---- ----- ----
1 x1 4 x4
2 x2 5 x5
3 x3

(所影响的行数为 3 行)

**/
luoyoumou 2009-10-14
  • 打赏
  • 举报
回复
-------------------------------------
-- Author : Luoyoumou
-- Comment: 三月红梨
-- Date : 2009-10-14 09:43:51
-------------------------------------
-- 根据你的记录行,数据对半分
--> 生成测试数据: @T
DECLARE @T TABLE (序号 int,数据 varchar(2))
INSERT INTO @T
SELECT 1,'x1' UNION ALL
SELECT 2,'x2' UNION ALL
SELECT 3,'x3' UNION ALL
SELECT 4,'x4' UNION ALL
SELECT 5,'x5'

DECLARE @B INT
SELECT @B=((MAX(序号)+1)/2) FROM @T
PRINT @B;
--SQL查询如下:

SELECT t1.序号, t1.数据,
t2.序号, t2.数据
FROM @T t1 left join @T t2
on (t1.序号%@B)=(t2.序号%@B) and t1.序号<=@B and t2.序号>@B
where t1.序号<=@B
张家可 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangck 的回复:]
SQL code-------------------------------------
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-10-13 22:01:51
---------------------------------------> 生成测试数据: @TDECLARE@TTABLE (序号int,数据¡­
[/Quote]

UP
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangck 的回复:]
SQL code-------------------------------------
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-10-13 22:01:51
---------------------------------------> 生成测试数据: @TDECLARE@TTABLE (序号int,数据¡­
[/Quote]
顶一个
luoyoumou 2009-10-14
  • 打赏
  • 举报
回复
---呵呵:就小梁的,不过还可以做成活动的:根据你的记录行数,从中间截断,分成两部分!
---记录行数为单数的,在第一组多放一条记录就OK了!
7761098 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangck 的回复:]
SQL code-------------------------------------
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-10-13 22:01:51
---------------------------------------> 生成测试数据: @TDECLARE@TTABLE (序号int,数据varchar(2))INSERTINTO@TSELECT1,'x1'UNIONALLSELECT2,'x2'UNIONALLSELECT3,'x3'UNIONALLSELECT4,'x4'UNIONALLSELECT5,'x5'--SQL查询如下:SELECTMAX(CASEWHEN (序号-1)/3=0THENLTRIM(序号)ELSE''END),MAX(CASEWHEN (序号-1)/3=0THEN 数据ELSE''END),MAX(CASEWHEN (序号-1)/3=1THENLTRIM(序号)ELSE''END),MAX(CASEWHEN (序号-1)/3=1THEN 数据ELSE''END)FROM@TGROUPBY (序号-1)%3+1/*
------------ ---- ------------ ----
1 x1 4 x4
2 x2 5 x5
3 x3

(3 行受影响)*/
[/Quote]

case when group 炉火纯清啊,佩服之情犹如滔滔江水.........
liangCK 2009-10-13
  • 打赏
  • 举报
回复
-------------------------------------
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-10-13 22:01:51
-------------------------------------

--> 生成测试数据: @T
DECLARE @T TABLE (序号 int,数据 varchar(2))
INSERT INTO @T
SELECT 1,'x1' UNION ALL
SELECT 2,'x2' UNION ALL
SELECT 3,'x3' UNION ALL
SELECT 4,'x4' UNION ALL
SELECT 5,'x5'

--SQL查询如下:

SELECT
MAX(CASE WHEN (序号-1)/3 = 0 THEN LTRIM(序号) ELSE '' END),
MAX(CASE WHEN (序号-1)/3 = 0 THEN 数据 ELSE '' END),
MAX(CASE WHEN (序号-1)/3 = 1 THEN LTRIM(序号) ELSE '' END),
MAX(CASE WHEN (序号-1)/3 = 1 THEN 数据 ELSE '' END)
FROM @T
GROUP BY (序号-1)%3 + 1

/*
------------ ---- ------------ ----
1 x1 4 x4
2 x2 5 x5
3 x3

(3 行受影响)


*/

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧