一个较难的查询问题,求各位大侠帮个忙!sql语句,存储过程都行! 50CSDN]

发布时间:2016-12-11 2:54:19 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"一个较难的查询问题,求各位大侠帮个忙!sql语句,存储过程都行! 50CSDN]",主要涉及到一个较难的查询问题,求各位大侠帮个忙!sql语句,存储过程都行! 50CSDN]方面的内容,对于一个较难的查询问题,求各位大侠帮个忙!sql语句,存储过程都行! 50CSDN]感兴趣的同学可以参考一下。

两个表:  表 tbreq   fid      freqmanid    storid    1           a1         a    2           a2         b    3           a3         c                   表 tbcheck   fcheckerid   fstoreid      001          a      002          a      003          b      004          c      005          b 表 tbman     fpersonid    fpersonname      001            王三      002            李四      003            王五      004            张七      005            里八           需要查询结果为:   freqmanid    storeid     fcheckerid       fpersonname          a1           a         001,002          王三,李四       a2           b         003,005          王五,里八       a3           c         004              张七 也就是说一个 freqmanid(申请类型) 可能对应几个fcheckmanid(检查人),要把她合并成一条记录 求各位帮个忙!深表感谢!!

http://blog.csdn.net/fengfangfang/archive/2006/06/29/851663.aspx

create table  tbreq (fid INT,freqmanid VARCHAR(10),storid VARCHAR(10)) INSERT INTO tbreq SELECT 1,'a1','a' union all select 2,'a2','b' union all select 3,'a3','c' create table  tbcheck (fcheckerid VARCHAR(10),fstoreid VARCHAR(10)) INSERT INTO tbcheck SELECT '001','a' union all select '002','a' union all select '003','b' union all select '004','c' union all select '005','b' create table  tbman (fpersonid VARCHAR(10),fpersonname VARCHAR(10)) INSERT INTO tbman SELECT '001','王三' union all select '002','李四' union all select '003','王五' union all select '004','张七' union all select '005','里八' create function f_getstr(@flag int,@fstoreid varchar(10)) returns varchar(200) as BEGIN   DECLARE     @r VARCHAR(200)   SET @r = ''   IF @flag = 1     BEGIN       SELECT @r = @r + ',' + FCHECKERID       FROM   TBCHECK A,              TBMAN B       WHERE  A.FCHECKERID = B.FPERSONID              AND FSTOREID = @fstoreid     END   IF @flag = 2     BEGIN       SELECT @r = @r + ',' + FPERSONNAME       FROM   TBCHECK A,              TBMAN B       WHERE  A.FCHECKERID = B.FPERSONID              AND FSTOREID = @fstoreid     END   RETURN (STUFF(@r,1,1,'')) END SELECT freqmanid=B.freqmanid,    STOREID = A.FSTOREID,        FCHECKERID = DBO.F_GETSTR(1,A.FSTOREID),        FPERSONNAME = DBO.F_GETSTR(2,A.FSTOREID) FROM   TBCHECK A,tbreq B WHERE A.fstoreid=B.storid GROUP BY B.freqmanid,A.FSTOREID DROP TABLE TBCHECK,tbreq,tbman /* a1 a 001,002 王三,李四 a2 b 003,005 王五,里八 a3 c 004 张七 */

-- create table tbreq (fid int, freqmanid char(2), storid char(1)) -- insert tbreq -- select 1,'a1','a' union all -- select 2,'a2','b' union all -- select 3,'a3','c' --  --  -- create table tbcheck(fcheckerid char(3),fstoreid char(1)) -- insert tbcheck -- select '001', 'a'  union all -- select '002', 'a' union all -- select '003', 'b' union all -- select '004', 'c' union all -- select '005', 'b' --  -- create table tbman(fpersonid char(3), fpersonname varchar(10)) -- insert tbman -- select '001', '王三' union all -- select '002', '李四' union all -- select '003', '王五' union all -- select '004', '张七' union all -- select '005', '里八' select a.freqmanid,a.storid,dbo.f_str(b.fstoreid) fcheckerid,dbo.f_str1(b.fstoreid) fpersonname from tbreq a inner join tbcheck b on a.storid = b.fstoreid inner join tbman c on b.fcheckerid = c.fpersonid group by a.freqmanid,a.storid,b.fstoreid --  --   freqmanid    storeid     fcheckerid       fpersonname    --       a1           a         001,002          王三,李四 --       a2           b         003,005          王五,里八 --       a3           c         004              张七 --函数 1 SET QUOTED_IDENTIFIER ON  GO SET ANSI_NULLS ON  GO --合并处理函数 alter  FUNCTION dbo.f_str1(@fstoreid varchar(10)) RETURNS varchar(100) AS BEGIN DECLARE @re varchar(100) SET @re='' SELECT @[email protected]+','+ b.fpersonname FROM tbcheck a inner join tbman b on a.fcheckerid = b.fpersonid WHERE a.fstoreid= @fstoreid RETURN(STUFF(@re,1,1,'')) END GO SET QUOTED_IDENTIFIER OFF  GO SET ANSI_NULLS ON  GO --函数 SET QUOTED_IDENTIFIER ON  GO SET ANSI_NULLS ON  GO --合并处理函数 ALTER   FUNCTION dbo.f_str(@fstoreid varchar(10)) RETURNS varchar(100) AS BEGIN DECLARE @re varchar(100) SET @re='' SELECT @[email protected]+','+fcheckerid FROM tbcheck WHERE [email protected] RETURN(STUFF(@re,1,1,'')) END GO SET QUOTED_IDENTIFIER OFF  GO SET ANSI_NULLS ON  GO

create table tb(fid int,freqmanid varchar(10),storid varchar(10)) insert into tb select   1,'a1','a' union all select   2,'a2','b' union all select   3,'a3','c' go create table tt(fcheckerid varchar(10),fstoreid varchar(10))    insert into tt select '001','a' union all select '002','a' union all select '003','b' union all select '004','c' union all select '005','b' go create table ta(fpersonid varchar(10),fpersonname varchar(10))     insert into ta select '001','王三' union all select  '002','李四' union all select  '003','王五' union all select  '004','张七' union all select  '005','里八' go create function dbo.fc_str1(@fstoreid varchar(100)) returns varchar(100) as begin  declare @sql varchar(1000)  set @sql=''  select @[email protected]+','+cast(fcheckerid as varchar(100)) from tt where [email protected]  return stuff(@sql,1,1,'') end go create function dbo.fc_str2(@fstoreid varchar(100)) returns varchar(100) as begin  declare @sql varchar(1000)  set @sql=''  select @[email protected]+','+cast(fpersonname as varchar(100)) from ta a,tt b where a.fpersonid=b.fcheckerid and [email protected]  return stuff(@sql,1,1,'') end go select a.freqmanid,a.storid,dbo.fc_str1(b.fstoreid) as fcheckerid,dbo.fc_str2(b.fstoreid) as fpersonname from tb a,tt b where a.storid=b.fstoreid group by a.freqmanid,a.storid,b.fstoreid drop table tb,tt,ta drop function dbo.fc_str1,dbo.fc_str2

上一篇:Distributed transaction aborted by MSDTC ? 20CSDN]
下一篇:要求用一个sql语句求出每个新闻分类的前N条记录 5CSDN]

相关文章

相关评论