用怎样的SQL语句实现如下查询?

rghjf 2002-07-16 01:55:37
有表1
id column1
1 102
1 103
1 104
2 105
2 106
2 107
要达到如下效果
id new column
1 102 103 104
2 105 106 107

...全文
60 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDNM 2002-07-16
  • 打赏
  • 举报
回复
那是精华贴,当然不错,不过duckcn(xty) 早指出了!
rghjf 2002-07-16
  • 打赏
  • 举报
回复
谢谢各位
本人查到一不错的方法,地址如下:
http://www.csdn.net/expert/topic/632/632928.xml?temp=.1198999
OpenVMS 2002-07-16
  • 打赏
  • 举报
回复
合并为一个字段吗?
select a.*,(select count(*) from hp1 where id=a.id and column1<=a.column1) IDX into #t1 from hp1 a
select a.id,
(rtrim(convert(varchar(10),sum(case when idx=1 then column1 else '' end)))+','+
rtrim(convert(varchar(10),sum(case when idx=2 then column1 else '' end))) +','+
rtrim(convert(varchar(10),sum(case when idx=3 then column1 else '' end)))) 'new column'
from #t1 a
group by id
OpenVMS 2002-07-16
  • 打赏
  • 举报
回复
select a.*,(select count(*) from hp1 where id=a.id and column1<=a.column1) IDX into #t1 from hp1 a
select a.id,
sum(case when idx=1 then column1 else '' end) '1',
sum(case when idx=2 then column1 else '' end) '2',
sum(case when idx=3 then column1 else '' end) '3'
from #t1 a
group by id
qybao 2002-07-16
  • 打赏
  • 举报
回复
如果不想用游标,可以这样试试
SELECT A.id,
newcolumn=B.column+' '+C.column+' '+D.column
FROM (SELECT DISTINCT id FROM yourtable) AS A,
yourtable AS B,
yourtable AS C,
yourtable AS D
WHERE A.id=B.id
and A.id=C.id
and A.id=D.id
and C.column<D.column
and C.column>B.column

qybao 2002-07-16
  • 打赏
  • 举报
回复
如果不想用游标,可以这样试试
SELECT A.id,
newcolumn=B.column+' '+C.column+' '+D.column
FROM (SELECT DISTINCT id FROM yourtable) AS A,
yourtable AS B,
yourtable AS C,
yourtable AS D
WHERE A.id=B.id
and A.id=C.id
and A.id=D.id
and C.column<D.column
and C.column>B.column

OpenVMS 2002-07-16
  • 打赏
  • 举报
回复
select a.*,(select count(*) from hp1 where id=a.id and column1<=a.column1) IDX into #t1 from hp1 a
select a.id,
sum(case when idx=1 then column1 else '' end) '1',
sum(case when idx=2 then column1 else '' end) '2',
sum(case when idx=3 then column1 else '' end) '3'
from #t1 a
group by id
OpenVMS 2002-07-16
  • 打赏
  • 举报
回复
select a.*,(select count(*) from hp1 where id=a.id and column1<=a.column1) IDX into #t1 from hp1 a
select a.id,
sum(case when idx=1 then column1 else '' end) '1',
sum(case when idx=2 then column1 else '' end) '2',
sum(case when idx=3 then column1 else '' end) '3'
from #t1 a
group by id
duckcn 2002-07-16
  • 打赏
  • 举报
回复
如果你是要求合并为new column字段,可以参考
http://www.csdn.net/expert/topic/632/632928.xml?temp=.1198999
CSDNM 2002-07-16
  • 打赏
  • 举报
回复
CREATE TABLE #T(ID INT,[new column] VARCHAR(300))

SELECT * INTO #T1 FROM 表1
INSERT #T SELECT ID,MIN(column1) FROM #T1 GROUP BY ID
DELETE #T1 FROM #T1 A
WHERE column1=(SELECT MIN(column1) FROM #T1 WHERE ID=A.ID)

WHILE EXISTS (SELECT * FROM #T1)
BEGIN
UPDATE #T
SET [new column]=[new column]+' ' +B.column1
FROM #T A,#T1 B
WHERE A.ID=B.ID
AND B.column1=(SELECT MIN(column1) FROM #T1 WHERE ID=B.ID)
DELETE #T1 FROM #T1 A
WHERE column1=(SELECT MIN(column1) FROM #T1 WHERE ID=A.ID)
END

SELECT * FROM #T
DROP TABLE #T,#T1
duckcn 2002-07-16
  • 打赏
  • 举报
回复
如果你的new column是一个字段的话,可以参考下面帖子
http://www.csdn.net/expert/topic/632/632928.xml?temp=.2164575
OpenVMS 2002-07-16
  • 打赏
  • 举报
回复
select a.*,(select count(*) from table1 where id=a.id and column1<=a.column1) IDX into #t1 from table1 a
select distinct a.id,
( select (case when idx=1 then column1 else '' end) from #t1 where id=a.id) '1',
( select (case when idx=2 then column1 else '' end) from #t1 where id=a.id) '2',
( select (case when idx=3 then column1 else '' end) from #t1 where id=a.id) '3'
from #t1 a

34,576

社区成员

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

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