求条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
*/
---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