关于取出值组合等于某个值的查询语句

cqnucsmoon 2011-12-02 05:28:02
我有一个表,表中数据如下:
ID VAL
A 10
B 20
C 22
D 12
其中ID的值没有重复有,有没有可能得到这样的数据:将VAL值组合后得到32的数据重新生成一个表,如下:

ZHID ID VAL
1 A 10
1 C 22
2 B 20
2 D 12

A和C的VAL值相加为32,分到组1中去
B和D的VAL值相加为32,分到组2中去

谢谢大家
...全文
87 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-12-04
  • 打赏
  • 举报
回复
这样,就和你给的结果完全一样了:
create table tb(ID varchar(10),VAL int)
insert into tb select 'A',10
insert into tb select 'B',20
insert into tb select 'C',22
insert into tb select 'D',12
go
--如果是要求由两列的和获取32,则
select a.id,a.val,b.id id1,b.val v1,n=identity(int,1,1) into #
from tb a,tb b
where a.val+b.val=32 and a.val<b.val
order by a.id
select n,id,val from #
union all
select n,id1,v1 from # order by n
/*
n id val
----------- ---------- -----------
1 A 10
1 C 22
2 B 20
2 D 12

(4 行受影响)

*/
go
drop table tb,#
-晴天 2011-12-04
  • 打赏
  • 举报
回复
这样横排好像更能显示是在同一组吧.如果要竖排:
create table tb(ID varchar(10),VAL int)
insert into tb select 'A',10
insert into tb select 'B',20
insert into tb select 'C',22
insert into tb select 'D',12
go
--如果是要求由两列的和获取32,则
select a.id,a.val,b.id id1,b.val v1,n=identity(int,1,1) into #
from tb a,tb b
where a.val+b.val=32 and a.val<b.val
select n,id,val from #
union all
select n,id1,v1 from # order by n
/*
n id val
----------- ---------- -----------
1 D 12
1 B 20
2 C 22
2 A 10

(4 行受影响)

*/
go
drop table tb,#
-晴天 2011-12-04
  • 打赏
  • 举报
回复
create table tb(ID varchar(10),VAL int)
insert into tb select 'A',10
insert into tb select 'B',20
insert into tb select 'C',22
insert into tb select 'D',12
go
--如果是要求由两列的和获取32,则
select a.id,a.val,b.id,b.val
from tb a,tb b
where a.val+b.val=32 and a.val<b.val
/*
id val id val
---------- ----------- ---------- -----------
D 12 B 20
A 10 C 22

(2 行受影响)

*/
go
drop table tb
cqnucsmoon 2011-12-04
  • 打赏
  • 举报
回复
偶使用的是SQL SERVER 2000
cqnucsmoon 2011-12-04
  • 打赏
  • 举报
回复
自已顶下。
AcHerat 元老 2011-12-02
  • 打赏
  • 举报
回复
你两个值可以用1楼,多个组合。。。
快溜 2011-12-02
  • 打赏
  • 举报
回复
with cte as
(select row_number() over(order by getdate()) no,
a.id as id1,a.val as val1,b.id as id2,b.val as val
from tb a,tb b where a.val=32-b.val)
select no,id1 as id,val1 as val from cte
union
select no,id2,val2 from cte

34,576

社区成员

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

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