+ -
当前位置:首页 → 问答吧 → 字符怎么合并

字符怎么合并

时间:2011-12-21

来源:互联网

SQL code

CREATE PROC [dbo].[人事变动周报表存储1]  
(@公司编号 NVARCHAR(20)  
,@部门编号 NVARCHAR(20)  
,@姓名 NVARCHAR(10)  
,@开始日期 datetime  
,@结束日期 datetime  
)  
  
AS  
BEGIN  
  
  
CREATE TABLE #temp  
(公司编号 NVARCHAR(20)  
,公司名称 NVARCHAR(30)  
,部门编号 NVARCHAR(20)  
,部门名称 NVARCHAR(30)  
,本周现总人数 int  
,离职人数 int  
,入职人数 int  
,备注 NVARCHAR(MAX))  
   
INSERT INTO #temp (公司编号,公司名称,部门编号,部门名称,本周现总人数)  
SELECT 公司编号,公司名称,部门编号,部门名称,COUNT(档案唯一值) AS 现总人数  
FROM 员工表 WHERE 在职状态='在职'  
GROUP BY 公司编号,公司名称,部门编号,部门名称   
  
  
INSERT INTO #temp (公司编号,公司名称,部门编号,部门名称,离职人数,备注)  
SELECT A.公司编号,A.公司名称,A.部门编号,A.部门名称,COUNT(A.档案唯一值) AS 离职人数,('离职:'+@姓名) AS 备注  
FROM 员工表 A JOIN 入职登记表头 B ON A.档案唯一值=B.档案唯一值   
WHERE 在职状态='离职' AND 离职日期 BETWEEN @开始日期 AND @结束日期  
  
GROUP BY A.公司编号,A.公司名称,A.部门编号,A.部门名称   
  
  
INSERT INTO #temp (公司编号,公司名称,部门编号,部门名称,入职人数,备注)  
SELECT A.公司编号,A.公司名称,A.部门编号,A.部门名称,COUNT(A.档案唯一值) AS 入职人数,('入职:'+@姓名) AS 备注  
FROM 员工表 A JOIN 入职登记表头 B ON A.档案唯一值=B.档案唯一值   
WHERE 在职状态='在职' AND 入职日期 BETWEEN @开始日期 AND @结束日期  
GROUP BY A.公司编号,A.公司名称,A.部门编号,A.部门名称   
  
  
SELECT 公司编号,公司名称,部门编号,部门名称,  
      SUM(现总人数) AS 本周现总人数,  
      SUM(离职人数) AS 离职人数,  
      SUM(入职人数) AS 入职人数,  
      MAX(备注)  
FROM #temp   
WHERE    
    dbo.LikeValue(公司编号,@公司编号)=1  
AND dbo.LikeValue(部门编号,@部门编号)=1  
  
GROUP BY 公司编号,公司名称,部门编号,部门名称  
  
END  
  
  
DROP TABLE #temp

/例如:
----------想要的结果-----------

公司编号 公司名称 部门编号 部门名称 现总人数 离职人数 入职人数 备注
  01       XXX       001   总经办     10         1       1      入职:XXX  , 离职:XXX
 /



姓名有自己的唯一值。(档案唯一值)

主要是那个 备注 搞不定!

作者: lailai410   发布时间: 2011-12-21

合并列值 等小小来解决。

作者: fredrickhu   发布时间: 2011-12-21

作者: lailai410   发布时间: 2011-12-21

SQL code

--我这没环境,你自己试试
CREATE PROC [dbo].[人事变动周报表存储1]  
(@公司编号 NVARCHAR(20)  
,@部门编号 NVARCHAR(20)  
,@姓名 NVARCHAR(10)  
,@开始日期 datetime  
,@结束日期 datetime  
)  
  
AS  
BEGIN  
  
  
CREATE TABLE #temp  
(公司编号 NVARCHAR(20)  
,公司名称 NVARCHAR(30)  
,部门编号 NVARCHAR(20)  
,部门名称 NVARCHAR(30)  
,本周现总人数 int  
,离职人数 int  
,入职人数 int  
,备注 NVARCHAR(MAX))  
   
INSERT INTO #temp (公司编号,公司名称,部门编号,部门名称,本周现总人数)  
SELECT 公司编号,公司名称,部门编号,部门名称,COUNT(档案唯一值) AS 现总人数  
FROM 员工表 WHERE 在职状态='在职'  
GROUP BY 公司编号,公司名称,部门编号,部门名称   
  
  
INSERT INTO #temp (公司编号,公司名称,部门编号,部门名称,离职人数,备注)  
SELECT A.公司编号,A.公司名称,A.部门编号,A.部门名称,COUNT(A.档案唯一值) AS 离职人数,('离职:'+@姓名) AS 备注  
FROM 员工表 A JOIN 入职登记表头 B ON A.档案唯一值=B.档案唯一值   
WHERE 在职状态='离职' AND 离职日期 BETWEEN @开始日期 AND @结束日期  
  
GROUP BY A.公司编号,A.公司名称,A.部门编号,A.部门名称   
  
  
INSERT INTO #temp (公司编号,公司名称,部门编号,部门名称,入职人数,备注)  
SELECT A.公司编号,A.公司名称,A.部门编号,A.部门名称,COUNT(A.档案唯一值) AS 入职人数,('入职:'+@姓名) AS 备注  
FROM 员工表 A JOIN 入职登记表头 B ON A.档案唯一值=B.档案唯一值   
WHERE 在职状态='在职' AND 入职日期 BETWEEN @开始日期 AND @结束日期  
GROUP BY A.公司编号,A.公司名称,A.部门编号,A.部门名称   
  
  
SELECT 公司编号,公司名称,部门编号,部门名称,  
      SUM(现总人数) AS 本周现总人数,  
      SUM(离职人数) AS 离职人数,  
      SUM(入职人数) AS 入职人数,  
      STUFF((SELECT ','+[备注] 
      FROM #TEMP T2 
      WHERE T2.[公司编号]=T1.公司编号
      FOR XML PATH('') ),1,1,'')
FROM #temp   T1
WHERE    
    dbo.LikeValue(公司编号,@公司编号)=1  
AND dbo.LikeValue(部门编号,@部门编号)=1  
  
GROUP BY 公司编号,公司名称,部门编号,部门名称  
  
END  
  
  
DROP TABLE #temp

作者: kuqideyupian   发布时间: 2011-12-21

不会,来站脚助威,围观学习

作者: TravyLee   发布时间: 2011-12-21