select a.*,b.kpjbtype,b.kpbl from dbo.Fb_hynrinfo a left join Fb_hyglinfo b on a.nrno = b.nrno
where hyno = '20110706806' and nrlx = 0 order by nrno上面这句sql运行后得出的结果:
id  nrno            hyno          nrbt     nrbz       nrlx      zb      kpjbtype       kpbl
4   20110706806002  20110706806   aaa      aaa-1      0         44      1              44
4   20110706806002  20110706806   aaa      aaa-1      0         44      2              56
7   20110706806005  20110706806   ccc      ccc-1      0         22      null           null
13  20110706806006  20110706806   ddd      ddd-1      0         13      null           null如何改sql,等到的结果是:
id  nrno            hyno          nrbt     nrbz       nrlx      zb      kpjbtype       kpbl
4   20110706806002  20110706806   aaa      aaa-1      0         44      1+2            44+56
7   20110706806005  20110706806   ccc      ccc-1      0         22      0              0
13  20110706806006  20110706806   ddd      ddd-1      0         13      0              0

解决方案 »

  1.   

    本帖最后由 caozhy 于 2011-07-09 12:13:51 编辑
      

  2.   

    这样写不对会报错的
    我 a表中有字段id,nrno,hyno,nrbt,nrbz,nrlx,zb  这些字段都是要查出来的,但是你这样写会报这些字段不在消息 8120,级别 16,状态 1,第 1 行
    选择列表中的列 'dbo.Fb_hynrinfo.id 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。还是不知道怎么改?
      

  3.   

    select a.*,b.kpjbtype,b.kpbl from dbo.Fb_hynrinfo a left join 
    (select * from fb_hyglinfo where kpjbtype = (select min(kpjbtype) from fb_hyglinfo group by nrno)) b
     on a.nrno = b.nrno
    where hyno = '20110706806' and nrlx = 0 order by nrno
      

  4.   

    select sum(kpjbttype), sum(kpbl), top 1 a.*,b.kpjbtype,b.kpbl from dbo.Fb_hynrinfo a left join Fb_hyglinfo b on a.nrno = b.nrno
    where hyno = '20110706806' and nrlx = 0 group by a.nrno order by nrno
      

  5.   

    单从数据看
    我觉得楼主的数据表设计不够优化,不符合2NF
    答案不止一种
    下面的也能得到楼主想要的答案SELECT nrno
          ,hyno
          ,nrbt
          ,nrbz
          ,nrlx
          ,zb
          ,sum(ISNull(kpjbtype,0))
          ,sum(ISNull(kpbl,0))
      FROM dbo.Fb_hynrinfo
    where hyno = '20110706806' and nrlx = 0 
    group by nrno
          ,hyno
          ,nrbt
          ,nrbz
          ,nrlx
          ,zb
    order by nrno
      

  6.   

    不好意思
    漏了id 字段
    SELECT id
      ,nrno
          ,hyno
          ,nrbt
          ,nrbz
          ,nrlx
          ,zb
          ,sum(ISNull(kpjbtype,0))
          ,sum(ISNull(kpbl,0))
      FROM dbo.Fb_hynrinfo
    where hyno = '20110706806' and nrlx = 0 
    group by id
      ,nrno
          ,hyno
          ,nrbt
          ,nrbz
          ,nrlx
          ,zb
    order by nrno
      

  7.   

    select a.id,a.nrno,a.hyno,a.nrbt,a.nrbz,sum(kpjbtype) kpjbtype, sum(kpbl) kpbl
     from dbo.Fb_hynrinfo a left join Fb_hyglinfo b on a.nrno = b.nrno
    where hyno = '20110706806' and nrlx = 0 group by a.id,a.nrno,a.hyno,a.nrbt,a.nrbz
     order by nrno
    --试试
      

  8.   

    select a.id,a.nrno,a.hyno,a.nrbt,a.nrbz,a.nrlx,isnull(sum(kpjbtype),0) kpjbtype, isnull(sum(kpbl),0) kpbl
     from dbo.Fb_hynrinfo a left join Fb_hylinfo b on a.nrno = b.nrno
    where hyno = '20110706806' and nrlx = 0 group by a.id,a.nrno,a.hyno,a.nrbt,a.nrbz,a.nrlx
     order by nrno
    --这个会更好点~~
      

  9.   

    select a.id,a.nrno,a.hyno,a.nrbt,a.nrbz,a.nrlx,isnull(sum(kpjbtype),0) kpjbtype, isnull(sum(kpbl),0) kpbl
     from dbo.Fb_hynrinfo a left join Fb_hyglinfo b on a.nrno = b.nrno
    where hyno = '20110706806' and nrlx = 0 group by a.id,a.nrno,a.hyno,a.nrbt,a.nrbz,a.nrlx
     order by nrno
    --10楼表名没写对~~
      

  10.   

    合并列值!合并列值 
    --给你个例子,自己照着改吧*******************************************************************************************
    表结构,数据如下: 
    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) */ 
      

  11.   

    麻烦14楼 在帮我看一下啊
    select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '') 
    from tb 
    group by id 如果 我的[value] 是int 类型的话,我用这句话,就会报错啊。。消息 245,级别 16,状态 1,第 1 行
    在将 varchar 值 ',' 转换成数据类型 int 时失败。
      

  12.   

    那就转换一下呗,convert(varchar(20),[value])