首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求条sql话语

2013-07-01 
求条sql语句表1代号姓名是否统计系数关键字1111aaa是北京1111aaa是上海2222bbb否广州表2系数关键字系数北

求条sql语句
表1
代号    姓名     是否统计    系数关键字
1111   aaa       是                 北京
1111   aaa       是                  上海
2222   bbb       否                 广州
表2
系数关键字      系数
北京                   0.5
上海                   1.0
我想这样统计,如果表1的是否统计为是,那么他的那条记录就是1*表2的系数,然后求表1中每个人的合计
[解决办法]

create table tb1
(
代号 varchar(10),
姓名 varchar(10),
是否统计 varchar(2),
系数关键字 varchar(10)
)
create table tb2
(
系数关键字 varchar(10),
系数 float(8)
)

insert into tb1
select '1111','aaa','是','北京'
union all
select '1111','aaa','是','上海'
union all
select '2222','bbb','否','广州'

insert into tb2
select '北京',0.5
union all
select '上海',1.0

select 代号,姓名,
sum(case when 是否统计='是' then 系数 else 0 end) as 系数
from tb1 inner join tb2 on tb1.系数关键字=tb2.系数关键字 group by 代号,姓名

[解决办法]
---------------------------- 
-- Author  :DBA_Huangzj(發糞塗牆) 
-- Date    :2013-05-15 11:18:34 


-- Version: 
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)  
--    Jun 17 2011 00:54:03  
--    Copyright (c) Microsoft Corporation 
--    Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721) 
-- 
---------------------------- 
--> 测试数据:[表1] 
if object_id('[表1]') is not null drop table [表1] 
go  
create table [表1]([代号] int,[姓名] varchar(3),[是否统计] varchar(2),[系数关键字] varchar(4)) 
insert [表1] 
select 1111,'aaa','是','北京' union all
select 1111,'aaa','是','上海' union all
select 2222,'bbb','否','广州'
  
--> 测试数据:[表2] 
if object_id('[表2]') is not null drop table [表2] 
go  
create table [表2]([系数关键字] varchar(4),[系数] numeric(2,1)) 
insert [表2] 
select '北京',0.5 union all
select '上海',1.0 
  

--------------开始查询-------------------------- 
SELECT [代号],[姓名],SUM([计算后系数]) [合计] 
FROM ( 
select  a.*,CASE WHEN 是否统计='是' THEN 1*系数 ELSE 1 END '计算后系数'
from (SELECT * FROM [表1]WHERE 是否统计='是') a LEFT JOIN  [表2] b ON a.系数关键字=b.系数关键字
)a 
GROUP BY [代号],[姓名] 
----------------结果---------------------------- 
/*  
代号          姓名   合计
----------- ---- ---------------------------------------
1111        aaa  1.5
*/

求条sql话语这样?
[解决办法]
---author:viola
---date:2013.05.15
---计算列
CREATE table tableKey
(
id int,
name nvarchar(20),
isCount bit,
sKey nvarchar(20)
)

CREATE table tableKey2
(
sKey nvarchar(20),
vari decimal(8,2)
)
INSERT INTO tableKey VALUES('aa',1,'北京')
INSERT INTO tableKey VALUES('aa',1,'北京')
INSERT INTO tableKey VALUES('bb',0,'上海')

insert into tablekey2 VALUES('北京',1.0)
insert into tablekey2 VALUES('上海',0.5)

SELECT a.name,
SUM(CASE a.isCount WHEN 1 THEN 1*b.vari ELSE b.vari END)
from tableKey a
JOIN tableKey2 b
on a.sKey=b.sKey
GROUP BY a.name

热点排行