请问怎么写一个返回多个列不重复的结果表的存储过程啊?

爱知菜 2011-07-06 10:33:25
比如我有一张表

1 2 4
2 4 7
2 6 9
3 9 0
1 6 7
2 9 5

返回这样的结果:
1 2 4
2 4 7
3 6 9
NULL 9 5
NULL NULL 0

其实就是聚类搜索,不过如果聚类后列的数目如果不同,就用NULL补足,列与列间不相关!
谢谢
...全文
111 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱知菜 2011-07-06
  • 打赏
  • 举报
回复
显示的问题,
规律就是把每一列出现过的数字归并出来
比如第一列是1 2 2 3 1 2
就把1 2 3这三个数字归并出来,

这样形成一张表
qgqch2008 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fredrickhu 的回复:]

没懂算法
[/Quote]+
--小F-- 2011-07-06
  • 打赏
  • 举报
回复
没懂算法
chuanzhang5687 2011-07-06
  • 打赏
  • 举报
回复
369怎么来的?
Mr_Nice 2011-07-06
  • 打赏
  • 举报
回复
没看懂规律...
爱知菜 2011-07-06
  • 打赏
  • 举报
回复
NULL不一定要补在结尾,只要保证3个列的行数相同就可以了
Sweet-Tang 2011-07-06
  • 打赏
  • 举报
回复
@TempTable是表变量
在SQL 2008中没有问题
爱知菜 2011-07-06
  • 打赏
  • 举报
回复
请问是不是您这个存储过程直接放到新建的存储过程中运行就可以了?TempTable是临时表吧?
爱知菜 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tangdunfeng 的回复:]
SQL code




declare @TempTable table ( c1 int , c2 int , c3 int )
insert into @TempTable
( c1 , c2 , c3 )
values
( 1 , 2 , 4 ),
( 2 , 4 , 7 ),
( 2 , 6 ,……
[/Quote]
先谢谢7楼啊,不过貌似你的存储过程放到sql2005里面报错啊,

消息 102,级别 15,状态 1,第 5 行
',' 附近有语法错误。

点开显示这行有错: ( 1 , 2 , 4 ),
ly745455 2011-07-06
  • 打赏
  • 举报
回复
MARK
Sweet-Tang 2011-07-06
  • 打赏
  • 举报
回复
运行结果:
c1 c2 c3
1 2 0
2 4 4
3 6 5
NULL 9 7
NULL NULL 9
Sweet-Tang 2011-07-06
  • 打赏
  • 举报
回复




declare @TempTable table ( c1 int , c2 int , c3 int )
insert into @TempTable
( c1 , c2 , c3 )
values
( 1 , 2 , 4 ),
( 2 , 4 , 7 ),
( 2 , 6 , 9 ),
( 3 , 9 , 0 ),
( 1 , 6 , 7 ),
( 2 , 9 , 5 ) ;
with T1
as ( select distinct
DENSE_RANK() over ( order by c1 ) as cIndex ,
c1
from
@TempTable
),
T2
as ( select distinct
DENSE_RANK() over ( order by c2 ) as cIndex ,
c2
from
@TempTable
),
T3
as ( select distinct
DENSE_RANK() over ( order by c3 ) as cIndex ,
c3
from
@TempTable
)
--select * from t2
select
c1 ,
c2 ,
c3
from
master.dbo.spt_values
left join T1
on t1.cIndex = dbo.spt_values.number
left join T2
on t2.cIndex = dbo.spt_values.number
left join T3
on t3.cIndex = dbo.spt_values.number
where
type = 'P'
and dbo.spt_values.number between 1
and ( select
max(num)
from
( select
count(1) num
from
t1
union all
select
count(1)
from
t2
union all
select
count(1)
from
t3
) TT
)

22,209

社区成员

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

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