TableA的OperateTime相当于TableC的LogTime,页面有时间的条件搜索,在页面上选择好时间搜索条件后,TableA的OperateTime和TableC的LogTime要分别对应SELECT a.ID, a.Name, SUM(a.Money) AS Expr1, CONVERT(VARCHAR(10), a.OperateTime, 120) AS OperateTime,CONVERT(VARCHAR(10), c.LogTime, 120) AS LogTime,SUM(c.Money2),SUM(c.Money3)
FROM TableA INNER JOIN TableC  c ON c.PeronID = a.ID  where a.OperateTime>=beingtime and a.OperateTime<=endtime
GROUP BY a.ID, a.Name, CONVERT(VARCHAR(10), a.OperateTime, 120),CONVERT(VARCHAR(10), c.LogTime, 120)
数据是
TableAID Name Expr1 OperateTime
01 小明 1 2011-9-15 13:24:00
01 小明 3 2011-9-15 13:25:00
01 小明 10 2011-9-15 15:19:00TableC
PeronID PeronName  Money2   Money3   LogTime
01       小明        5         1     2011-9-15 13:24:00
01       小明        3         3     2011-9-15 13:25:00
01       小明        2         7       2011-9-15 15:19:00

解决方案 »

  1.   

    需要的结果是tableA的这几行数据和tableC的这几行数据并成一行
      

  2.   

    合并列值 
    --*******************************************************************************************
    表结构,数据如下: 
    id    value 
    ----- ------ 
    1    aa 
    1    bb 
    2    aaa 
    2    bbb 
    2    ccc 需要得到结果: 
    id    values 
    ------ ----------- 
    1      aa,bb 
    2      aaa,bbb,ccc 
    即:group by id, 求 value 的和(字符串相加) 1. 旧的解决方法(在sql server 2000中只能用函数解决。) 
    --=============================================================================
    create table tb(id int, value varchar(10)) 
    insert into tb values(1, 'aa') 
    insert into tb values(1, 'bb') 
    insert into tb values(2, 'aaa') 
    insert into tb values(2, 'bbb') 
    insert into tb values(2, 'ccc') 
    go 
    --1. 创建处理函数 
    CREATE FUNCTION dbo.f_strUnite(@id int) 
    RETURNS varchar(8000) 
    AS 
    BEGIN 
        DECLARE @str varchar(8000) 
        SET @str = '' 
        SELECT @str = @str + ',' + value FROM tb WHERE id=@id 
        RETURN STUFF(@str, 1, 1, '') 
    END 
    GO 
    -- 调用函数 
    SELECt id, value = dbo.f_strUnite(id) FROM tb GROUP BY id 
    drop table tb 
    drop function dbo.f_strUnite 
    go
    /* 
    id          value      
    ----------- ----------- 
    1          aa,bb 
    2          aaa,bbb,ccc 
    (所影响的行数为 2 行) 
    */ 
    --===================================================================================
    2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。) 
    create table tb(id int, value varchar(10)) 
    insert into tb values(1, 'aa') 
    insert into tb values(1, 'bb') 
    insert into tb values(2, 'aaa') 
    insert into tb values(2, 'bbb') 
    insert into tb values(2, 'ccc') 
    go 
    -- 查询处理 
    SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY( 
            SELECT [values]= STUFF(REPLACE(REPLACE( 
                ( 
                    SELECT value FROM tb N 
                    WHERE id = A.id 
                    FOR XML AUTO 
                ), ' <N value="', ','), '"/>', ''), 1, 1, '') 
    )N 
    drop table tb /* 
    id          values 
    ----------- ----------- 
    1          aa,bb 
    2          aaa,bbb,ccc (2 行受影响) 
    */ --SQL2005中的方法2 
    create table tb(id int, value varchar(10)) 
    insert into tb values(1, 'aa') 
    insert into tb values(1, 'bb') 
    insert into tb values(2, 'aaa') 
    insert into tb values(2, 'bbb') 
    insert into tb values(2, 'ccc') 
    go select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '') 
    from tb 
    group by id /* 
    id          values 
    ----------- -------------------- 
    1          aa,bb 
    2          aaa,bbb,ccc (2 row(s) affected) */ drop table tb 
      

  3.   


    select a.*,c.Money2,c.Money3 from [TableA] a join [TableC] c 
    on (a.ID=c.PeronID and a.Name=c.PeronName and a.OperateTime=c.LogTime)/*  这样?
    ID   Name Expr1       OperateTime             Money2      Money3
    ---- ---- ----------- ----------------------- ----------- -----------
    01   小明   1           2011-09-15 13:24:00.000 5           1
    01   小明   3           2011-09-15 13:25:00.000 3           3
    01   小明   10          2011-09-15 15:19:00.000 2           7(3 行受影响)
      

  4.   


    select a.ID,a.Name,
    OperateTime=CONVERT(varchar(10),a.OperateTime,120),
    Money2=SUM(c.Money2),
    Money3=SUM(c.Money3) from [TableA] a join [TableC] c 
    on (a.ID=c.PeronID and a.Name=c.PeronName and a.OperateTime=c.LogTime)
    group by a.ID,a.Name,CONVERT(varchar(10),a.OperateTime,120)/*   还是这样?
    ID   Name OperateTime Money2      Money3
    ---- ---- ----------- ----------- -----------
    01   小明   2011-09-15  10          11(1 行受影响)
      

  5.   

    前面说错了
    TableC的数据应该是这样
    PeronID PeronName Money2 Money3 LogTime
    01       小明        5      1      2011-9-15 17:24:00
    01       小明        3      3      2011-9-15 18:25:00
    01       小明        2      7      2011-9-15 19:19:00
      

  6.   

    那你数据改了后
    TableA的OperateTime和TableC的LogTime要分别对应
    这句话怎么理解?
      

  7.   

    搜索TableA的OperateTime也同时搜索TableC的LogTime
    也就是说当页面的时间搜索条件为2011年9月24日-2011年9月25日时,那么将同时限制TableA的OperateTime和TableC的LogTime
      

  8.   

    你这样说那A表完全是没用的,A和C的关联点没有看到
    直接
    select select ID,Name,
    OperateTime=CONVERT(varchar(10),LogTime,120),
    Money2=SUM(Money2),
    Money3=SUM(Money3) [TableC] 
    --where LogTime between ... and ...
    group by ID,Name,CONVERT(varchar(10),LogTime,120)
      

  9.   

    A表有用的啊,总共有3个sum,第1个sum就是A表的SELECT a.ID, a.Name, SUM(a.Money) AS Expr1, CONVERT(VARCHAR(10), a.OperateTime, 120) AS OperateTime,CONVERT(VARCHAR(10), c.LogTime, 120) AS LogTime,SUM(c.Money2),SUM(c.Money3)
    FROM TableA INNER JOIN TableC c ON c.PeronID = a.ID where a.OperateTime>=beingtime and a.OperateTime<=endtime
    GROUP BY a.ID, a.Name, CONVERT(VARCHAR(10), a.OperateTime, 120),CONVERT(VARCHAR(10), c.LogTime, 120)
      

  10.   

    A表和C表的关联点是:c.PeronID = a.ID 
      

  11.   

    1.你给的数据中A表没money字段
    2.用你的c.PeronID = a.ID不能做到唯一关联,如果是按天的话还可以加上
    CONVERT(varchar(10),a.OperateTime,120)=CONVERT(varchar(10),c.LogTime,120)
    3.其实你要的答案可能就是
    select a.ID,a.Name,
    OperateTime=CONVERT(varchar(10),a.OperateTime,120),
    Expr1=SUM(a.Money),
    Money2=SUM(c.Money2),
    Money3=SUM(c.Money3) 
    from [TableA] a join [TableC] c 
    on (a.ID=c.PeronID and CONVERT(varchar(10),a.OperateTime,120)=CONVERT(varchar(10),c.LogTime,120))
    --where 时间限制写这里
    group by a.ID,a.Name,CONVERT(varchar(10),a.OperateTime,120)
      

  12.   


    /*
    1.你给的数据中A表没money字段
    2.用你的c.PeronID = a.ID不能做到唯一关联,如果是按天的话还可以加上
    CONVERT(varchar(10),a.OperateTime,120)=CONVERT(varchar(10),c.LogTime,120)
    3.其实你要的答案可能就是
    */
    select a.ID,a.Name,
    OperateTime=CONVERT(varchar(10),a.OperateTime,120),
    Expr1=SUM(a.Money),
    Money2=SUM(c.Money2),
    Money3=SUM(c.Money3)  
    from [TableA] a join [TableC] c  
    on (a.ID=c.PeronID and CONVERT(varchar(10),a.OperateTime,120)=CONVERT(varchar(10),c.LogTime,120))
    --where 时间限制写这里
    group by a.ID,a.Name,CONVERT(varchar(10),a.OperateTime,120)
      

  13.   

    算出来的结果SUM(a.Money)有效果,SUM(c.Money2),SUM(c.Money3)没效果
      

  14.   


    --> 测试数据: [TableA]
    if object_id('[TableA]') is not null drop table [TableA]
    create table [TableA] (ID varchar(2),Name varchar(4),money int,OperateTime datetime)
    insert into [TableA]
    select '01','小明',1,'2011-9-15 13:24:00' union all
    select '01','小明',3,'2011-9-15 13:25:00' union all
    select '01','小明',10,'2011-9-15 15:19:00'
    --> 测试数据: [TableC]
    if object_id('[TableC]') is not null drop table [TableC]
    create table [TableC] (PeronID varchar(2),PeronName varchar(4),Money2 int,Money3 int,LogTime datetime)
    insert into [TableC]
    select '01','小明',5,1,'2011-9-15 13:24:00' union all
    select '01','小明',3,3,'2011-9-15 13:25:00' union all
    select '01','小明',2,7,'2011-9-15 15:19:00'--开始查询
    select a.ID,a.Name,
    OperateTime=CONVERT(varchar(10),a.OperateTime,120),
    Expr1=SUM(a.Money),
    Money2=SUM(c.Money2),
    Money3=SUM(c.Money3)  
    from [TableA] a join [TableC] c  
    on (a.ID=c.PeronID and CONVERT(varchar(10),a.OperateTime,120)=CONVERT(varchar(10),c.LogTime,120))
    --where 时间限制写这里
    group by a.ID,a.Name,CONVERT(varchar(10),a.OperateTime,120)--结束查询
    drop table [TableA],[TableC]/*   为啥我有?
    ID   Name OperateTime Expr1       Money2      Money3
    ---- ---- ----------- ----------- ----------- -----------
    01   小明   2011-09-15  42          30          33(1 行受影响)
      

  15.   

    为何算出来的三个sum都是应该出的结果的3倍?
      

  16.   


    但是用CONVERT(varchar(10),c.LogTime,120))这个方法可以让时间为相同的啊?