在线等,一两行变一行。

木老师 2009-08-07 10:42:58
例如:有下面的数据表

ISBN DWMC LB YS YW
123456 杨昆 A 2M2 789
123456 杨昆 B A4 45
123456 杨昆 C A4 34
123456 杨昆 D 2M2 98
123456 杨昆 E 2M2 98


我想通过select查询得到下面的结果:
[字段]ISBN DWMC LB YS YW LB1 YS1 YW11
记录1:123456 杨昆 A 2M2 789 B A4 45
记录2:123456 杨昆 C A4 34 D 2M2 98
记录3:123456 杨昆 E A4 34
...全文
276 69 打赏 收藏 转发到动态 举报
写回复
用AI写文章
69 条回复
切换为时间正序
请发表友善的回复…
发表回复
木老师 2009-08-07
  • 打赏
  • 举报
回复
问题没有解决,等待中....
木老师 2009-08-07
  • 打赏
  • 举报
回复
我的数据表为lmdjb
feixianxxx 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 61 楼 netedao 的回复:]
(poofly)
GO附近的错误.
[/Quote]
。。我都测试出来了。。你还有错。。
不是吧。。
木老师 2009-08-07
  • 打赏
  • 举报
回复
如果有1000条或10000条记录,这样做是不行的.
谢谢各位.
木老师 2009-08-07
  • 打赏
  • 举报
回复
(poofly)
GO附近的错误.
feixianxxx 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 58 楼 netedao 的回复:]
feixianxxx

(poofly) 这位大G好象没有搞明白我的意思,还是非常感谢.
[/Quote]
你不是不许想用 临时表么?
56楼还不可以?
木老师 2009-08-07
  • 打赏
  • 举报
回复
人物是在数据表内的.随时增加,减少,程序是要打包的.不能改的.
木老师 2009-08-07
  • 打赏
  • 举报
回复
feixianxxx

(poofly) 这位大G好象没有搞明白我的意思,还是非常感谢.
feixianxxx 2009-08-07
  • 打赏
  • 举报
回复
这次一句了。。
而且人物可以补丁 去试试
feixianxxx 2009-08-07
  • 打赏
  • 举报
回复
-- =========================================
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================

IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( ISBN varchar(10),DWMC varchar(10) ,LB varchar(10) ,YS varchar(10),YW varchar(10))
go
insert tb SELECT
'123456' ,'杨昆' ,'A' ,'2M2', '789' UNION ALL SELECT
'123456', '杨昆' ,'B' ,'A4' ,'45' UNION ALL SELECT
'123456','杨昆' ,'C' ,'A4' ,'34' UNION ALL SELECT
'123456' ,'杨昆', 'D' ,'2M2', '98' UNION ALL SELECT
'123456', '杨昆', 'E' ,'2M2', '98'UNION ALL SELECT
'343' , '张三' ,'dd' ,'12', '58' UNION ALL SELECT
'343' , '张三', 'ee' ,'12' ,'58' UNION ALL SELECT
'343' , '张三', 'ff' ,'12', '58'
go
select *
from(
select k.ISBN,k.DWMC,LB=k.LB, YS=k.YS, YW=k.YW, LB1=p.LB, YS1=p.YS,YW11=p.YW
from (select Id=(select count(*) from tb where r.ISBN=ISBN and r.LB>=LB ),* from tb r) k
join (select ID=(select count(*) from tb where r.ISBN=ISBN and r.LB>=LB),* from tb r ) p
on k.ISBN=p.ISBN and k.id=p.id-1 and k.id%2=1
union all
select k.ISBN,k.DWMC,LB=k.LB,YS=k.YS, YW=k.YW, LB1='',YS1='', YW11=' '
from tb k
where not exists(select * from tb where k.ISBN=ISBN and LB>k.LB)) k
order by ISBN ,lb
go
/*
ISBN DWMC LB YS YW LB1 YS1 YW11
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
123456 杨昆 A 2M2 789 B A4 45
123456 杨昆 C A4 34 D 2M2 98
123456 杨昆 E 2M2 98
343 张三 dd 12 58 ee 12 58
343 张三 ff 12 58
*/
feixianxxx 2009-08-07
  • 打赏
  • 举报
回复
-- =========================================
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================

IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( ISBN varchar(10),DWMC varchar(10) ,LB varchar(10) ,YS varchar(10),YW int)
go
insert tb SELECT
'123456' ,'杨昆' ,'A' ,'2M2', 789 UNION ALL SELECT
'123456', '杨昆' ,'B' ,'A4' ,45 UNION ALL SELECT
'123456','杨昆' ,'C' ,'A4' ,34 UNION ALL SELECT
'123456' ,'杨昆', 'D' ,'2M2', 98 UNION ALL SELECT
'123456', '杨昆', 'E' ,'2M2', 98UNION ALL SELECT
'343' , '张三' ,'dd' ,'12', 58 UNION ALL SELECT
'343' , '张三', 'ee' ,'12' ,58 UNION ALL SELECT
'343' , '张三', 'ff' ,'12', 58
go
select * from(
select k.ISBN,
k.DWMC,
LB=k.LB,
YS=k.YS,
YW=k.YW,
LB1=p.LB,
YS1=p.YS,
YW11=p.YW
from (select Id=(select count(*) from tb where r.ISBN=ISBN and r.LB>=LB ),* from tb r) k
join (select ID=(select count(*) from tb where r.ISBN=ISBN and r.LB>=LB),* from tb r ) p
on k.ISBN=p.ISBN and k.id=p.id-1 and k.id%2=1
union all
select k.ISBN,
k.DWMC,
LB=k.LB,
YS=k.YS,
YW=k.YW,
LB1='',
YS1='',
YW11=' '
from tb k
where not exists(select * from tb where k.ISBN=ISBN and LB>k.LB)) k
order by ISBN ,lb
go
/*
(8 行受影响)
ISBN DWMC LB YS YW LB1 YS1 YW11
---------- ---------- ---------- ---------- ----------- ---------- ---------- -----------
123456 杨昆 A 2M2 789 B A4 45
123456 杨昆 C A4 34 D 2M2 98
123456 杨昆 E 2M2 98 0
343 张三 dd 12 58 ee 12 58
343 张三 ff 12 58 0

*/
木老师 2009-08-07
  • 打赏
  • 举报
回复
可我要将这个代码固定到程序中,是要反复执行的.
feixianxxx 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 netedao 的回复:]
而且只能执行一次,第二次就发生#错误.
[/Quote]

大哥灵活点。。
第二次的时候别选中执行呗
木老师 2009-08-07
  • 打赏
  • 举报
回复
而且只能执行一次,第二次就发生#错误.
黄_瓜 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 netedao 的回复:]
SQL serve2000不认识IDNTITY
[/Quote]
木老师 2009-08-07
  • 打赏
  • 举报
回复
改了#,执行后没有显示.
木老师 2009-08-07
  • 打赏
  • 举报
回复
SELECT ID = IDENTITY (INT, 1, 1), *
INTO #
FROM lmdjb
SELECT ISBN, DWMC, MAX(CASE WHEN ID % 2 = 1 THEN LB ELSE 0 END) AS LB,
MAX(CASE WHEN ID % 2 = 1 THEN YS ELSE 0 END) AS YS,
MAX(CASE WHEN ID % 2 = 1 THEN YW1 ELSE 0 END) AS YW1,
MAX(CASE WHEN ID % 2 = 0 THEN LB ELSE 0 END) AS LB1,
MAX(CASE WHEN ID % 2 = 0 THEN YS ELSE 0 END) AS YS1,
MAX(CASE WHEN ID % 2 = 0 THEN YW1 ELSE 0 END) AS YW11
FROM #
GROUP BY ISBN, DWMC

还是存在#号错误.
木老师 2009-08-07
  • 打赏
  • 举报
回复
(77C#+SQL)的 执行不了.
SQL77 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 netedao 的回复:]
例如:有下面的数据表

ISBN  DWMC LB YS YW
123456 杨昆 A 2M2 789
123456 杨昆 B A4 45
123456 杨昆 C A4 34
123456 杨昆 D 2M2 98
123456 杨昆 E 2M2 98
343    张三 dd 12 58
343    张三 ee 12 58
343    张三 ff 12 58
......


我想通过select查询得到下面的结果:
[字段]ISBN    ISBN LB YS YW  LB1 YS1 YW11
记录1:123456 杨昆 A 2M2 789 B  A4  45
记录2:123456 杨昆 C A4  34  D  2M2 98
记录3:123456 杨昆 E A4  34 
记录4:343    张三 dd 12 58  ee 12 58 
记录5:343    张三 ff 12 58

.........
[/Quote]
思路就是这样的,应该没问题的呀,已经按ISBN 分组了ISBN
木老师 2009-08-07
  • 打赏
  • 举报
回复
13楼对于固定的记录是可以的,但我的记录是不定的.最好就一个select
加载更多回复(49)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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