当前位置:数据库 > SQLServer >>

MSSQL 查询设计

表A PK A01 A02 A03 A04 A05 A06 A07 A08 01 aa bb cc dd ee ff gg hh 02 bb cc aa hh gg ee ff dd 03 ff aa ee bb cc gg dd hh ………………………………………………………… 表B PK B01 B02 B03 B04 B05 B06 B07 B08 01 1 5 4 3 8 3 9 1 02 3 4 5 4 2 5 6 8 03 7 9 12 5 7 1 3 2 ………………………………………………………… 表A.PK=表B.PK B01的数字是A01 aa的数量。怎么设计个查询能够查询表A里面所有aa对应表B里面的数量之和? 查询的结果应该是aa=1+5+9 bb=5+3+5 gg=9+1+2这样的结果?
答案:create table A(PK varchar(10),A01 varchar(10),A02 varchar(10),A03 varchar(10),A04 varchar(10),A05 varchar(10),A06 varchar(10),A07 varchar(10),A08 varchar(10))
insert into a values('01', 'aa',  'bb',  'cc',  'dd' , 'ee',  'ff',  'gg',  'hh')
insert into a values('02', 'bb',  'cc',  'aa',  'hh' , 'gg',  'ee',  'ff',  'dd')
insert into a values('03', 'ff',  'aa',  'ee',  'bb' , 'cc',  'gg',  'dd',  'hh')
create table b(PK varchar(10),B01 int,B02 int,B03 int,B04 int,B05 int,B06 int,B07 int,B08 int)
insert into b values('01', 1 , 5 , 4  ,3  ,  8 , 3 , 9 , 1)
insert into b values('02', 3 , 4 , 5  ,4  ,  2 , 5 , 6 , 8)
insert into b values('03', 7 , 9 , 12 , 5 ,   7,  1,  3,  2)
go

select a , sum(b) b from
(
select a.pk , a.a01 a , b.b01 b from a , b where a.pk = b.pk
union all
select a.pk , a.a02 a , b.b02 b from a , b where a.pk = b.pk
union all
select a.pk , a.a03 a , b.b03 b from a , b where a.pk = b.pk
union all
select a.pk , a.a04 a , b.b04 b from a , b where a.pk = b.pk
union all
select a.pk , a.a05 a , b.b05 b from a , b where a.pk = b.pk
union all
select a.pk , a.a06 a , b.b06 b from a , b where a.pk = b.pk
union all
select a.pk , a.a07 a , b.b07 b from a , b where a.pk = b.pk
union all
select a.pk , a.a08 a , b.b08 b from a , b where a.pk = b.pk
) t
group by a


drop table a , b

/*
a          b           
---------- ----------- 
aa         15
bb         13
cc         15
dd         14
ee         25
ff         16
gg         12
hh         7

(所影响的行数为 8 行)

*/
自己写了个 感觉太麻烦
这个是CSDN大乌龟写的
这个方法很不错
其他:有意思,先占个板凳,有了结果再送上。 
--PLSQL我还能给你写下,T_SQL语法我还真不太了。给你个思路吧。
select a.pk into to @x from a where a.a01='aa';
select b.b01 into @y from b where b.pk=@x;
通过这两句就能得到一个a表中a01字段中aa对应在 b表中b01字段中的数字了。
你再通过一些loop应该就能实现了。 

上一个:T-SQL和 MSSQL有什么不同
下一个:MSSQL 2005 由于目标机器积极拒绝,无法连接

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,