27,579
社区成员
发帖
与我相关
我的任务
分享
/*
这样楼主也许会好理解一些
*/
--下面这一句,类似你的 @strSQL 中的r
WITH CTE AS(
SELECT '123' 工号,'张三' 姓名
UNION ALL
SELECT '456' 工号,'李四' 姓名
)
SELECT 工号,姓名 FROM CTE
;
--下面这一句,类似@Sqltxt1 中的CTE
WITH CTE AS(
SELECT '123' 工号,'张三' 姓名
UNION ALL
SELECT '456' 工号,'李四' 姓名
)
SELECT COUNT(1) FROM CTE
;
USE [TourSoft_cn]
GO
/****** Object: StoredProcedure [dbo].[PR_lineTJSJ] Script Date: 08/21/2014 08:37:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[PR_lineTJSJ]--线路我发出与收到的统计(含 成人 小孩 全陪 出境 国内)
@orderww varchar(100)='TotalNum',--排序 Child ChenRen QuanPei Total
@orderuu varchar(10)='',--session UU
@BM varchar(100)='', --单独部门查询
@pageSize int = 15, /*每页显示的记录个数*/
@page int = 1, /*要显示那一页的记录*/
@pageCount int = 1 output, /*查询结果分页后的总页数*/
@Counts int = 1 output , /*查询到的记录数*/
@Sort int = 0--0为升序,1为降序
as
declare @strSQL nvarchar(4000) -- 主语句
declare @strwhere nvarchar(4000) -- where
Declare @FSortType nvarchar(5) --排序方式
declare @P int,@EP int;
set @P=@pageSize*(@page-1)+1;
set @EP=@pageSize*@page;
declare @Sqltxt1 nvarchar(100);
set @pageCount=20;
begin
if @Sort=0
set @FSortType=' asc' --升序
if @Sort=1
set @FSortType=' desc' --降序
set @strwhere= 'group by UU,BM order by '+@orderww+@FSortType
if @BM<>''
set @strwhere='where UU='+@orderuu+' group by UU,BM order by '+@orderww+@FSortType
set @strSQL = 'WITH r AS (
--发出的订单
select
(select z.OrderName) as BM ,
g.OrderUUer as UU,
sum(g.children) as children,
sum(g.chengren) as chengren,
sum(g.quanpei) as quanpei ,
sum(g.TotalNum) as TotalNum ,
sum(case when g.HTType=''国内'' or (g.HTType is null and g.ToCountry=''中国'') then g.TotalNum else 0 end) as guonei,
sum(case when g.HTType=''出境'' or (g.HTType is null and g.ToCountry<>''中国'') then g.TotalNum else 0 end) as chujing
from uuorder AS g LEFT JOIN uuorderview AS z ON g.orderID = z.orderID
where g.OrderID>0 and g.OrderUU='+@orderuu+' and g.LYType<>''合作伙伴''
group by g.OrderUUer,z.OrderName
union all
--收到的订单
select
(select z.OwerName) as BM ,
g.OwerUUer as UU,
sum(g.children) as children,
sum(g.chengren) as chengren,
sum(g.quanpei) as quanpei ,
sum(g.TotalNum) as TotalNum ,
sum(case when g.HTType=''国内'' or (g.HTType is null and g.ToCountry=''中国'') then g.TotalNum else 0 end) as guonei,
sum(case when g.HTType=''出境'' or (g.HTType is null and g.ToCountry<>''中国'') then g.TotalNum else 0 end) as chujing
from uuorder AS g LEFT JOIN uuorderview AS z ON g.orderID = z.orderID
where g.OrderID>0 and g.OwerUU='+@orderuu+' or (g.OrderUU='+@orderuu+' and g.LYType=''合作伙伴'')
group by g.OwerUUer,z.OwerName
)
SELECT ROW_NUMBER() OVER (ORDER BY sum('+@orderww+')'+@FSortType+') AS RowsID,DENSE_RANK() OVER(ORDER BY sum('+@orderww+')'+@FSortType+') AS Num,BM,UU,sum(children) as children ,sum(chengren) as chengren,sum(quanpei) as quanpei,sum(TotalNum) as TotalNum,sum(guonei) as guonei,sum(chujing) as chujing FROM r '+@strwhere
exec (@strSQL);
set @Sqltxt1 = 'WITH r AS (
--发出的订单
select
(select z.OrderName) as BM ,
g.OrderUUer as UU,
sum(g.children) as children,
sum(g.chengren) as chengren,
sum(g.quanpei) as quanpei ,
sum(g.TotalNum) as TotalNum ,
sum(case when g.HTType=''国内'' or (g.HTType is null and g.ToCountry=''中国'') then g.TotalNum else 0 end) as guonei,
sum(case when g.HTType=''出境'' or (g.HTType is null and g.ToCountry<>''中国'') then g.TotalNum else 0 end) as chujing
from uuorder AS g LEFT JOIN uuorderview AS z ON g.orderID = z.orderID
where g.OrderID>0 and g.OrderUU='+@orderuu+' and g.LYType<>''合作伙伴''
group by g.OrderUUer,z.OrderName
union all
--收到的订单
select
(select z.OwerName) as BM ,
g.OwerUUer as UU,
sum(g.children) as children,
sum(g.chengren) as chengren,
sum(g.quanpei) as quanpei ,
sum(g.TotalNum) as TotalNum ,
sum(case when g.HTType=''国内'' or (g.HTType is null and g.ToCountry=''中国'') then g.TotalNum else 0 end) as guonei,
sum(case when g.HTType=''出境'' or (g.HTType is null and g.ToCountry<>''中国'') then g.TotalNum else 0 end) as chujing
from uuorder AS g LEFT JOIN uuorderview AS z ON g.orderID = z.orderID
where g.OrderID>0 and g.OwerUU='+@orderuu+' or (g.OrderUU='+@orderuu+' and g.LYType=''合作伙伴'')
group by g.OwerUUer,z.OwerName
)
SELECT count(1) FROM r '+@strwhere
exec (@Sqltxt1);
END
insert into #temp //加上这个
SELECT ROW_NUMBER() OVER (ORDER BY sum('+@orderww+')'+@FSortType+') AS RowsID,DENSE_RANK() OVER(ORDER BY sum('+@orderww+')'+@FSortType+') AS Num,BM,UU,sum(children) as children ,sum(chengren) as chengren,sum(quanpei) as quanpei,sum(TotalNum) as TotalNum,sum(guonei) as guonei,sum(chujing) as chujing FROM r '+@strwhere
最后对临时表统计条数即可
--上面两句直接改为这一句就行了啊
select count(*) FROM r;
set @Sqltxt1 =N'select @Counts=count(*) FROM r'; --这里要个N哦,sp_executesql 要求的nvarchar类型