表1
代号 姓名 是否统计 系数关键字
1111 aaa 是 北京
1111 aaa 是 上海
2222 bbb 否 广州
表2
系数关键字 系数
北京 0.5
上海 1.0
我想这样统计,如果表1的是否统计为是,那么他的那条记录就是1*表2的系数,然后求表1中每个人的合计
代号 姓名 是否统计 系数关键字
1111 aaa 是 北京
1111 aaa 是 上海
2222 bbb 否 广州
表2
系数关键字 系数
北京 0.5
上海 1.0
我想这样统计,如果表1的是否统计为是,那么他的那条记录就是1*表2的系数,然后求表1中每个人的合计
-- 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 * from [表1]
--------------开始查询--------------------------
SELECT [代号],[姓名],SUM([计算后系数]) [合计]
FROM (
select a.*,CASE WHEN 是否统计='是' THEN 1*系数 ELSE 1 END '计算后系数'
from [表1] a LEFT JOIN [表2] b ON a.系数关键字=b.系数关键字)a
GROUP BY [代号],[姓名]
----------------结果----------------------------
/*
代号 姓名 合计
----------- ---- ---------------------------------------
1111 aaa 1.5
2222 bbb 1.0
*/
select (select [系数] from [表2] where [系数关键字] = [表1].[系数关键字]) as [系数], * from [表1] where [是否统计]='是'
create table table1(
id int,
xm varchar(100),
tj varchar(100),
gjz varchar(100)
)--drop table table2
create table table2(
gjz varchar(100),
xs numeric(12,2)
)insert into table1
select 1, '张三','是','北京' union
select 2, '李四','否','上海' union
select 3, '张三','是','上海' union
select 4, '王五','是','广州'
insert into table2
select '北京',0.5 union
select '上海',1.0 union
select '广州',1.5select xm,sum(xs) "合计" from (select b.xs,a.* from table1 a,table2 b where a.gjz=b.gjz) T group by xm
(
代号 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.0select 代号,姓名,
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
*/这样?
---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