set@CommonString=@CommonString+' SUM(r'+@cntT+') as r'+@cntT+','+' SUM(p'+@cntT+') as p'+@cntT+','
+'STUFF ((SELECT distinct '','' + ( CASE WHEN r'+@cntT+'> 0 THEN p.FlowKey END) FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as rT'+@cntT+', '
+'STUFF ((SELECT distinct '','' + ( CASE WHEN p'+@cntT+'> 0 THEN p.FlowKey END) FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as pT'+@cntT+', '
+'STUFF ((SELECT distinct '','' + ( CASE WHEN r'+@cntT+'> 0 THEN p.sn END) FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as rT'+@cntT+', '
+'STUFF ((SELECT distinct '','' + ( CASE WHEN p'+@cntT+'> 0 THEN p.sn END) FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as pT'+@cntT+', '
SET@cnt=@cnt+1;
END
set@CommonString=@CommonString
+'SUM(rTot) as rTot, SUM(pTot) as pTot, '
+'STUFF ((SELECT distinct '','' + p.FlowKey FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as rTTot,'
+'STUFF ((SELECT distinct '','' + p.FlowKey FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as pTTot ';
+'STUFF ((SELECT distinct '','' + p.sn FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as rTTot,'
+'STUFF ((SELECT distinct '','' + p.sn FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as pTTot ';
Set@SqlString=' '+
' select * from (';
IF@p_RptType='byDS'
--select cast(@CommonString as varchar(max)); --debug query ;
BEGIN
--for xml path 條件
set@groupcase1='where p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum and p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum';
set@groupcase2='where p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum ';
set@groupcase3='WHERE Emp_DS like ''深圳所%'' ';
set@groupcase1='where p.Emp_DS = a.Emp_DS ';
--set @groupcase2='where p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum ';
+'SELECT Emp_DS,Emp_DSNum,Emp_Item, cast(Emp_ItemNum as varchar(2)) as Emp_ItemNum, '+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+'GROUP BY Emp_DS, Emp_DSNum, Emp_Item, Emp_ItemNum '
+'union ALL '
+'SELECT Emp_DS,Emp_DSNum, ''合計'' as Emp_Item, ''S'' as Emp_ItemNum,'+replace(@CommonString,'@groupcase',@groupcase2)+'From #tmpAG a '
+'Group by Emp_DS, Emp_DSNum '
+'union ALL '
+'SELECT ''深圳所'' as Emp_DS, max(Emp_DSNum) as Emp_DSNum, ''合計'' as Emp_Item, ''S'' as Emp_ItemNum, '+replace(@CommonString,'@groupcase',@groupcase3)+'From #tmpAG a WHERE Emp_DS like ''深圳所%'' '
+'SELECT 1 as sort, Emp_DS, '+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+' GROUP BY Emp_DS '
+'union ALL '
+'SELECT ''總計'' as Emp_DS, max(Emp_DSNum) +1 as Emp_DSNum, ''總計'' as Emp_Item, ''T'' as Emp_ItemNum, '+replace(@CommonString,'@groupcase',@groupcase4)+'From #tmpAG a '
Set@SortString='Order by Emp_DSNum,Emp_ItemNum;';
+'SELECT 99 as sort,''總計'' as Emp_DS, '+replace(@CommonString,'@groupcase',@groupcase4)+'From #tmpAG a '
Set@SortString='Order by sort,Emp_DS;';
END
ELSEIF@p_RptType='byItem'
ELSEIF@p_RptType='byManage'
BEGIN
--for xml path 條件
set@groupcase1='where p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum and p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum';
set@groupcase2='where p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum ';
--set @groupcase2='where p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum ';
--set @groupcase3='WHERE Emp_DS like ''深圳所%'' ';
set@groupcase4=' ';
Set@SqlString=@SqlString+'SELECT Emp_Item, cast(Emp_ItemNum as varchar(2)) as Emp_ItemNum, Emp_DS, cast(Emp_DSNum as varchar(2)) as Emp_DSNum,'+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+' GROUP BY Emp_Item, Emp_ItemNum, Emp_DS, Emp_DSNum '
+'union ALL '
+'SELECT Emp_Item, cast(Emp_ItemNum as varchar(2)) as Emp_ItemNum, ''合計'' as Emp_DS, ''S'' as Emp_DSNum,'+replace(@CommonString,'@groupcase',@groupcase2)+'From #tmpAG a '
+'Group by Emp_Item, Emp_ItemNum '
+'union ALL '
+'SELECT ''深圳所'' as Emp_DS, cast(max(Emp_DSNum) as varchar(2)) as Emp_DSNum, ''合計'' as Emp_Item, ''S'' as Emp_ItemNum, '+replace(@CommonString,'@groupcase',@groupcase3)+'From #tmpAG a WHERE Emp_DS like ''深圳所%'' '
Set@SqlString=@SqlString+'SELECT 1 as sort, manage_center,'+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+' GROUP BY manage_center '
+'union ALL '
+'SELECT ''總計'' as Emp_Item, ''T'' as Emp_ItemNum, ''總計'' as Emp_DS, ''T'' as Emp_DSNum, '+replace(@CommonString,'@groupcase',@groupcase4)+'From #tmpAG a '
Set@SortString='Order by Emp_ItemNum, Emp_DSNum; ';
+'SELECT 99 as sort,''總計'' as manage_center,'+replace(@CommonString,'@groupcase',@groupcase4)+'From #tmpAG a '
Set@SortString='Order by sort,manage_center; ';
END
ELSEIF@p_RptType='byPeople'
BEGIN
-- -- by 承辦人
--for xml path 條件
set@groupcase1='where p.Emp_Name = a.Emp_Name and p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum and p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum ';
set@groupcase1='where p.Emp_Name = a.Emp_Name and p.Emp_DS = a.Emp_DS and p.manage_center = a.manage_center and p.Emp_DeptName = a.Emp_DeptName and p.Emp_DeptGroup = a.Emp_DeptGroup ';
set@groupcase2=' ';
Set@SqlString=@SqlString+'SELECT Emp_Name, Emp_Item, cast(Emp_ItemNum as varchar(2)) as Emp_ItemNum, Emp_DS, cast(Emp_DSNum as varchar(2)) as Emp_DSNum, Emp_Sort, '+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+'GROUP BY Emp_Name, Emp_Item, Emp_ItemNum, Emp_DS, Emp_DSNum, Emp_Sort '
Set@SqlString=@SqlString+'SELECT 1 as sort, Emp_Name,manage_center, Emp_DS, Emp_DeptName,Emp_DeptGroup, '+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+'GROUP BY Emp_Name, Emp_DS, manage_center, Emp_DeptName, Emp_DeptGroup '
+'union ALL '
+'SELECT '''' as Emp_Name, ''總計'' as Emp_Item, ''T'' as Emp_ItemNum, ''總計'' as Emp_DS, ''T'' as Emp_DSNum, (MAX(Emp_Sort)+1) as Emp_Sort, '+replace(@CommonString,'@groupcase',@groupcase2)+'From #tmpAG a '
+'SELECT 99 as sort, '''' as Emp_Name, '''' as manage_center, '''' as Emp_DS, '''' as Emp_DeptName, ''總計'' as Emp_DeptGroup, '+replace(@CommonString,'@groupcase',@groupcase2)+'From #tmpAG a '
Set@SortString='Order by Emp_ItemNum,Emp_DSNum, Emp_Name; ';
Set@SortString='Order by sort,Emp_Name,Emp_DS, manage_center, Emp_DeptName, Emp_DeptGroup; ';
set@CommonString=@CommonString+' SUM(r'+@cntT+') as r'+@cntT+','+' SUM(p'+@cntT+') as p'+@cntT+','
+'STUFF ((SELECT distinct '','' + ( CASE WHEN r'+@cntT+'> 0 THEN p.FlowKey END) FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as rT'+@cntT+', '
+'STUFF ((SELECT distinct '','' + ( CASE WHEN p'+@cntT+'> 0 THEN p.FlowKey END) FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as pT'+@cntT+', '
+'STUFF ((SELECT distinct '','' + ( CASE WHEN r'+@cntT+'> 0 THEN p.sn END) FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as rT'+@cntT+', '
+'STUFF ((SELECT distinct '','' + ( CASE WHEN p'+@cntT+'> 0 THEN p.sn END) FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as pT'+@cntT+', '
SET@cnt=@cnt+1;
END
set@CommonString=@CommonString
+'SUM(rTot) as rTot, SUM(pTot) as pTot, '
+'STUFF ((SELECT distinct '','' + p.FlowKey FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as rTTot,'
+'STUFF ((SELECT distinct '','' + p.FlowKey FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as pTTot ';
+'STUFF ((SELECT distinct '','' + p.sn FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as rTTot,'
+'STUFF ((SELECT distinct '','' + p.sn FROM #tmpAG AS p @groupcase FOR XML PATH('''')), 1, 1, N'''') as pTTot ';
Set@SqlString=' '+
' select * from (';
IF@p_RptType='byDS'
--select cast(@CommonString as varchar(max)); --debug query ;
BEGIN
--for xml path 條件
set@groupcase1='where p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum and p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum';
set@groupcase2='where p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum ';
set@groupcase3='WHERE Emp_DS like ''深圳所%'' ';
set@groupcase1='where p.Emp_DS = a.Emp_DS ';
--set @groupcase2='where p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum ';
+'SELECT Emp_DS,Emp_DSNum,Emp_Item, cast(Emp_ItemNum as varchar(2)) as Emp_ItemNum, '+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+'GROUP BY Emp_DS, Emp_DSNum, Emp_Item, Emp_ItemNum '
+'union ALL '
+'SELECT Emp_DS,Emp_DSNum, ''合計'' as Emp_Item, ''S'' as Emp_ItemNum,'+replace(@CommonString,'@groupcase',@groupcase2)+'From #tmpAG a '
+'Group by Emp_DS, Emp_DSNum '
+'union ALL '
+'SELECT ''深圳所'' as Emp_DS, max(Emp_DSNum) as Emp_DSNum, ''合計'' as Emp_Item, ''S'' as Emp_ItemNum, '+replace(@CommonString,'@groupcase',@groupcase3)+'From #tmpAG a WHERE Emp_DS like ''深圳所%'' '
+'SELECT 1 as sort, Emp_DS, '+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+' GROUP BY Emp_DS '
+'union ALL '
+'SELECT ''總計'' as Emp_DS, max(Emp_DSNum) +1 as Emp_DSNum, ''總計'' as Emp_Item, ''T'' as Emp_ItemNum, '+replace(@CommonString,'@groupcase',@groupcase4)+'From #tmpAG a '
Set@SortString='Order by Emp_DSNum,Emp_ItemNum;';
+'SELECT 99 as sort,''總計'' as Emp_DS, '+replace(@CommonString,'@groupcase',@groupcase4)+'From #tmpAG a '
Set@SortString='Order by sort,Emp_DS;';
END
ELSEIF@p_RptType='byItem'
ELSEIF@p_RptType='byManage'
BEGIN
--for xml path 條件
set@groupcase1='where p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum and p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum';
set@groupcase2='where p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum ';
--set @groupcase2='where p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum ';
--set @groupcase3='WHERE Emp_DS like ''深圳所%'' ';
set@groupcase4=' ';
Set@SqlString=@SqlString+'SELECT Emp_Item, cast(Emp_ItemNum as varchar(2)) as Emp_ItemNum, Emp_DS, cast(Emp_DSNum as varchar(2)) as Emp_DSNum,'+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+' GROUP BY Emp_Item, Emp_ItemNum, Emp_DS, Emp_DSNum '
Set@SqlString=@SqlString+'SELECT 1 as sort, manage_center,'+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+' GROUP BY manage_center '
+'union ALL '
+'SELECT Emp_Item, cast(Emp_ItemNum as varchar(2)) as Emp_ItemNum, ''合計'' as Emp_DS, ''S'' as Emp_DSNum,'+replace(@CommonString,'@groupcase',@groupcase2)+'From #tmpAG a '
+'Group by Emp_Item, Emp_ItemNum '
+'union ALL '
+'SELECT ''深圳所'' as Emp_DS, cast(max(Emp_DSNum) as varchar(2)) as Emp_DSNum, ''合計'' as Emp_Item, ''S'' as Emp_ItemNum, '+replace(@CommonString,'@groupcase',@groupcase3)+'From #tmpAG a WHERE Emp_DS like ''深圳所%'' '
+'union ALL '
+'SELECT ''總計'' as Emp_Item, ''T'' as Emp_ItemNum, ''總計'' as Emp_DS, ''T'' as Emp_DSNum, '+replace(@CommonString,'@groupcase',@groupcase4)+'From #tmpAG a '
Set@SortString='Order by Emp_ItemNum, Emp_DSNum; ';
+'SELECT 99 as sort,''總計'' as manage_center,'+replace(@CommonString,'@groupcase',@groupcase4)+'From #tmpAG a '
Set@SortString='Order by sort,manage_center; ';
END
ELSEIF@p_RptType='byPeople'
BEGIN
-- -- by 承辦人
--for xml path 條件
set@groupcase1='where p.Emp_Name = a.Emp_Name and p.Emp_DS = a.Emp_DS and p.Emp_DSNum = a.Emp_DSNum and p.Emp_Item = a.Emp_Item and p.Emp_ItemNum = a.Emp_ItemNum ';
set@groupcase1='where p.Emp_Name = a.Emp_Name and p.Emp_DS = a.Emp_DS and p.manage_center = a.manage_center and p.Emp_DeptName = a.Emp_DeptName and p.Emp_DeptGroup = a.Emp_DeptGroup ';
set@groupcase2=' ';
Set@SqlString=@SqlString+'SELECT Emp_Name, Emp_Item, cast(Emp_ItemNum as varchar(2)) as Emp_ItemNum, Emp_DS, cast(Emp_DSNum as varchar(2)) as Emp_DSNum, Emp_Sort, '+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+'GROUP BY Emp_Name, Emp_Item, Emp_ItemNum, Emp_DS, Emp_DSNum, Emp_Sort '
Set@SqlString=@SqlString+'SELECT 1 as sort, Emp_Name,manage_center, Emp_DS, Emp_DeptName,Emp_DeptGroup, '+replace(@CommonString,'@groupcase',@groupcase1)+'From #tmpAG a '
+'GROUP BY Emp_Name, Emp_DS, manage_center, Emp_DeptName, Emp_DeptGroup '
+'union ALL '
+'SELECT '''' as Emp_Name, ''總計'' as Emp_Item, ''T'' as Emp_ItemNum, ''總計'' as Emp_DS, ''T'' as Emp_DSNum, (MAX(Emp_Sort)+1) as Emp_Sort, '+replace(@CommonString,'@groupcase',@groupcase2)+'From #tmpAG a '
+'SELECT 99 as sort, '''' as Emp_Name, '''' as manage_center, '''' as Emp_DS, '''' as Emp_DeptName, ''總計'' as Emp_DeptGroup, '+replace(@CommonString,'@groupcase',@groupcase2)+'From #tmpAG a '
Set@SortString='Order by Emp_ItemNum,Emp_DSNum, Emp_Name; ';
Set@SortString='Order by sort,Emp_Name,Emp_DS, manage_center, Emp_DeptName, Emp_DeptGroup; ';