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
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
我 a表中有字段id,nrno,hyno,nrbt,nrbz,nrlx,zb 这些字段都是要查出来的,但是你这样写会报这些字段不在消息 8120,级别 16,状态 1,第 1 行
选择列表中的列 'dbo.Fb_hynrinfo.id 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。还是不知道怎么改?
(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
where hyno = '20110706806' and nrlx = 0 group by a.nrno order by nrno
我觉得楼主的数据表设计不够优化,不符合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
漏了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
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
--试试
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
--这个会更好点~~
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楼表名没写对~~
--给你个例子,自己照着改吧*******************************************************************************************
表结构,数据如下:
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) */
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 时失败。