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

解决方案 »

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

  2.   


    select (select [系数] from [表2] where [系数关键字] = [表1].[系数关键字]) as [系数], * from [表1] where [是否统计]='是'
      

  3.   

    --drop table table1
    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
      

  4.   

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

  5.   

    ---------------------------------------------------------------- 
    -- 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
    */这样?
      

  6.   

    ---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