本文的目的是:探讨数据仓库的必要性

复盘数字回款项目

数字回款项目数据层面核心是出“应收指标、回款指标”,在ERP系统已有一份存储过程里面包含了“认购、签约、回款”指标的背景下,数字回款项目表面看应该比较简单。但开发过程的实际情况并非如此:

第一阶段:开发PC应收报表数据——问题:影响生产库,需要协同明源才能更新脚本
当时为了快速出报表,完全基于生产只读库开发。遇到的问题是,开发好的视图/存储过程等需要在ERP生产库里面新增,然后同步到只读库。协同慢且影响了生产库。由于PC报表不需要秒开所以并没有落实体表只读库也算能用。

第二阶段:开发移动端的回款分析数据——问题:mysql性能远低于sqlserver,严重影响调试进展
移动端必须要秒开数据,需要落成实体表,不能再继续在生产的sqlserver只读库上进行开发,迁移到mysql上开发。首先遇到的问题是性能问题,同样的数据mysql的性能比sqlserver的性能低很多。跑一份数据需要大约1-2小时,为了保障数据不遗漏,每天晚上都需要专人盯着执行检查。每修改一次sql口径,需要等1小时才能得到结果。后来经多方协助通过一个特殊的mysql语法才解决了性能问题。但由于mysql经常掉索引,导致整个运行也不稳定。查错和开发的效率极其低下。

第三阶段:新增“认购指标”和调整“草签回款口径”——问题:没有明细数据,sql复杂对数极其困难
由于缺乏完整的口径文档,我们需要从erp的存储过程分析口径,2000行的sql只读库不支持with as 临时表层层嵌套,导致理解sql异常困难。核对数据不能到明细,只能到楼栋级,口径的核对完全靠猜测尝试房源才能一点一点进行。

问题总结起来:开发效率极低,对人员技术能力依赖很高,数据核对极其困难。

数据仓库的意义

以下总结主要对比常见的服务生产系统的数据库mysql和服务数据消费的数仓阿里云ADB PG版。

数据消费与数据生产

生产系统最需要操作【单条数据】的“增删改查”,比如:录入一份合同,一个客户,修改一个房源,删除一个客户,基本都是在操作单条记录,少量的表关联。需要处理并发录入的场景。
消费系统最需要操作【大量数据】的“查”,比如:当年销售完成就需要一年的数据,回款分析需要认购-签约-应收-回款多个业务环节的所有数据。基本都是在操作万级百万级条记录,很多表关联。需要处理大量读取数据的场景。

当数据在几兆几百兆的时候,关联表很少的时候,mysql和adb差异不大。一旦数据超过百万条1G以上差异就很明显了。阳光城应收1G-225万条,实收2.7G-423万条。

打个比方:轿车和公车,当乘客只有3个人的时候,轿车和公车差异不大,但是当乘客有20人时,轿车就玩不转了。

数据仓库的典型特性

我们从实际开发效率的视角看数仓的一些典型特征

第1个特征:性能强大,adb开发效率成本于mysql
我们挑选了体积接近的两个表分别做了sum,虽然不能完全说明问题,但是也略见一斑。mysql跑了近400秒(该指标不稳定,有时候只需要80秒),但adb只花了毫秒级。
图1:mysql
image.png
图2:3个节点的adb
image.png
这种性能主要体现在调试环节的效率,因为一个指标的开发,口径需要反复测试修改,完善,每执行一次数据出来才能核对,缓慢的性能严重影响了开发效率。

第2个特征:不易受限个人开发能力
举例:本次回款有一个口径需要按回款时间进行叠加。如下图:
image.png
这个需求本身在数仓里面有标准的函数支持,但是mysql5需要一个高级的写法才能实现。如下代码:

  1. set @ljtoal=0,@temp ='';
  2. SELECT
  3. saleguid,
  4. GetDate,
  5. amount,
  6. ItemType,
  7. # @ljtoal:=@ljtoal + IFNULL(amount, 0) AS ljtoal,
  8. @ljtoal:= case when @temp = saleguid then @ljtoal + IFNULL(amount, 0) else IFNULL(amount, 0) end as ljtoal,
  9. @temp := saleguid tmp
  10. FROM
  11. biraw.ods_my304_s_getin
  12. where saleguid is not null
  13. order by saleguid,GetDate asc
  14. ;

第3个特征:Schema非常适合数据分层管理
mysql的表完全混在一起
image.png
adb的表通过schema可对数据进行清晰的分层管理
image.png

第4个特征:物化视图实现前端秒响应,且大幅降低etl的工作量
移动端应用几乎都是需要秒反应的,要做到这一点最常见的做法就是把结果写成实体表,但是实体表需要建模和etl调度。但是物化视图可以跳过建模过程,既解决了性能问题,又不增加etl工作量。最新的adb还支持实时的物化视图。

第5个特征:通过外部表支持OSS文本数据
可以通过外部表实现对文本数据的访问,可以用来做备份,一些不常用的数据可以放到oss,比如:快照数据。

数据构建规范的意义

本次项目新增认购指标和修改草签回款口径,数据核对异常困难。因为erp的存储过程粒度是到“楼栋业态”但真正的口径分析数据查错是一定需要到最细颗粒度的。不遵循数据仓库构建规范的表核心存在三个问题:

  • 难以复用,已有指标,在新的场景需要使用时,难以复用;
  • 维度-限定-指标的构建不实现解耦的情况下,每一个sql都是独特的,运维难度很高,严重依赖个人;

所以数据仓库的背后是“技术+规范”,技术主要解决的是物理效率问题,规范主要解决“复用和易维护“的问题。

数仓对效率成本的影响

阳光城效率的实际情况是,同期我们做了两个差不多规模企业的项目,全局投入的资源水平接近,另外一个客户已经上线了七八个应用,阳光城的回款分析数据仍然在核对过程中。基础平台已经严重影响了服务效率。过程中浪费了工程师大量的时间:进行sql分析和优化,等待执行结果,人肉查错等低效任务。
当然我们并不限定adb,只是adb在我们过去实践过程中不到5万块每年的费用,所带来的效率提升是比oracle,GP等数据仓库都明显。

附件:数据核对难点示例
第一步:导出回款分析数据和erp存储过程数据通过分期关联对比差异找出分期
image.png
如果差异的分期比较少则快,分期多则麻烦。

第二步:查询erp报表界面定位楼栋
image.png
第三步:猜测可能的房源,核心问题在这里,有的能猜,有的不容易看出来
image.png

附件:ERP日报存储过程

  1. SET QUOTED_IDENTIFIER ON;
  2. SET ANSI_NULLS ON;
  3. GO
  4. ALTER PROC [dbo].[Rpt_s_FZD05_HZXM_zh_test1_Op_testbx]
  5. ( @projguid VARCHAR(MAX) ,---分期GUID
  6. @begDate DATETIME ,---开始时间
  7. @endDate DATETIME ---截至时间
  8. )
  9. AS /*拆分ProjGUID*/
  10. BEGIN
  11. SELECT *
  12. INTO #Proj
  13. FROM ( SELECT *
  14. FROM f_ProjGUID(@projguid , ',') ) moko;
  15. /* 初始化组织架构 */
  16. SELECT *
  17. INTO #BU
  18. FROM ( SELECT a.* ,
  19. ISNULL(b.CheckRate , 0) AS CheckRate ,
  20. ISNULL(b.RightsRate , 0) AS RightsRate ,
  21. ISNULL(b.StockRate , 0) AS StockRate ,
  22. ISNULL(ProjectState , '') 项目状态 ,
  23. ISNULL(ProjectLevel , '') 项目等级 ,
  24. ISNULL(sCity , '') 城市 ,
  25. ISNULL(sProjectMan , '') 项目营销负责人 ,
  26. ISNULL(sRegionCityMan , '') '区域_城市营销负责人' ,
  27. ISNULL(sRegionMan , '') 大区营销负责人 ,
  28. ISNULL(sIsCooper , '') 是否合作项目 ,
  29. ISNULL(sPartners , '') 合作方 ,
  30. ISNULL(sIsMark , '') 是否营销操盘 ,
  31. ISNULL(IsOperate , '') 是否我司操盘 ,
  32. ISNULL(Parallelmethod , '') 是否并表
  33. FROM vw_s_BusinessProject a WITH ( NOLOCK )
  34. INNER JOIN p_Project b WITH ( NOLOCK ) ON a.FQProjGUID = b.ProjGUID
  35. LEFT JOIN s_ProjectState_Qy ON a.ProjGUID = s_ProjectState_Qy.ProjectGUID
  36. LEFT JOIN s_ProjectState_Xm ON a.ProjGUID = s_ProjectState_Xm.ProjectGUID
  37. WHERE a.BUName NOT LIKE '%作废%'
  38. AND b.ProjGUID IN ( SELECT *
  39. FROM #Proj ) ) moko;
  40. --无交易数据
  41. -- SELECT r.RoomGUID ,
  42. -- 0 AS flag
  43. -- INTO #RoomGUID
  44. -- FROM dbo.p_Room r WITH ( NOLOCK )
  45. -- INNER JOIN #Proj p ON r.ProjGUID = p.projGUID
  46. -- LEFT JOIN dbo.s_Order so WITH ( NOLOCK ) ON so.RoomGUID = r.RoomGUID
  47. -- LEFT JOIN s_Contract sc ON sc.RoomGUID = r.RoomGUID
  48. -- WHERE so.OrderGUID IS NULL
  49. -- AND sc.ContractGUID IS NULL;
  50. -- --退房数据
  51. -- INSERT INTO #RoomGUID
  52. -- ( RoomGUID ,
  53. -- flag
  54. -- )
  55. -- SELECT DISTINCT
  56. -- a.RoomGUID ,
  57. -- 0
  58. -- FROM s_SaleHSData a WITH ( NOLOCK )
  59. -- INNER JOIN #Proj p ON a.ProjGUID = p.projGUID
  60. -- LEFT JOIN #RoomGUID ON #RoomGUID.RoomGUID = a.RoomGUID
  61. -- WHERE #RoomGUID.RoomGUID IS NULL
  62. -- GROUP BY a.RoomGUID
  63. -- HAVING SUM(a.Ts) = 0;
  64. ----有交易数据且交易日期在区间范围内
  65. -- INSERT INTO #RoomGUID
  66. -- ( RoomGUID ,
  67. -- flag
  68. -- )
  69. -- SELECT DISTINCT
  70. -- a.RoomGUID ,
  71. -- 1
  72. -- FROM s_SaleHSData a WITH ( NOLOCK )
  73. -- INNER JOIN #BU p ON a.ProjGUID = p.FQProjGUID
  74. -- WHERE QsDate >= @mindate
  75. -- AND Ts <> 0;
  76. SELECT DISTINCT
  77. RoomGUID ,
  78. OrderGUID
  79. INTO #RgRoomGUID
  80. FROM s_Order WITH ( NOLOCK )
  81. INNER JOIN #Proj p WITH ( NOLOCK ) ON p.projGUID = s_Order.ProjGUID
  82. WHERE CAST(QSDate AS DATE) <= @endDate
  83. AND ( Status = '激活'
  84. OR CAST(CloseDate AS DATE) > @endDate );
  85. INSERT INTO #RgRoomGUID
  86. ( RoomGUID ,
  87. OrderGUID )
  88. SELECT DISTINCT
  89. RoomGUID ,
  90. ContractGUID
  91. --INTO #QYRoomGUID
  92. FROM s_Contract WITH ( NOLOCK )
  93. INNER JOIN #Proj WITH ( NOLOCK ) ON #Proj.projGUID = s_Contract.ProjGUID
  94. WHERE CAST(QSDate AS DATE) <= @endDate
  95. AND ( Status = '激活'
  96. OR CAST(CloseDate AS DATE) > @endDate );
  97. --SELECT a.ProjGUID AS FQProjGUID ,
  98. -- b.BldGUID ,
  99. -- b.BldName ,
  100. -- a.TotalDj ,
  101. -- a.BldArea ,
  102. -- a.RoomGUID ,
  103. -- b.YszDate ,
  104. -- a.Status ,
  105. -- a.IsZiChiStatus ,
  106. -- a.BProductTypeCode ,
  107. -- t2.OrderGUID ,
  108. -- t3.ContractGUID
  109. --INTO #tmpYszRoomDate
  110. --FROM p_Room a WITH ( NOLOCK )
  111. -- INNER JOIN #Proj p ON p.projGUID = a.ProjGUID
  112. -- INNER JOIN p_Building b WITH ( NOLOCK ) ON a.BldGUID = b.BldGUID
  113. -- LEFT JOIN s_Order t2 WITH ( NOLOCK ) ON a.RoomGUID = t2.RoomGUID
  114. -- AND t2.QSDate <= @endDate
  115. -- AND ( t2.Status = '激活'
  116. -- OR t2.CloseDate > @endDate
  117. -- )
  118. -- LEFT JOIN s_Contract t3 WITH ( NOLOCK ) ON a.RoomGUID = t3.RoomGUID
  119. -- AND t3.QSDate <= @endDate
  120. -- AND ( t3.Status = '激活'
  121. -- OR t3.CloseDate > @endDate
  122. -- );
  123. --WHERE b.YszDate IS NOT NULL;
  124. --CREATE NONCLUSTERED INDEX [Ix_tmpYszRoomDate_IsZiChiStatus]
  125. --ON #tmpYszRoomDate ([IsZiChiStatus],YszDate)
  126. --INCLUDE ([TotalDj],[RoomGUID],BldGUID);
  127. --SELECT a.ProjGUID ,
  128. -- a.CjTotal ,
  129. -- a.RoomGUID
  130. --INTO #vw_s_JHRGDate
  131. --FROM dbo.s_Order a WITH ( NOLOCK )
  132. -- INNER JOIN #Proj b ON b.projGUID = a.ProjGUID
  133. --WHERE a.Status = '激活';
  134. --SELECT a.ProjGUID ,
  135. -- a.RoomGUID ,
  136. -- a.HtTotal ,
  137. -- a.ContractGUID ,
  138. -- ISNULL(a.SjBcTotal, 0) sjbctotal ,
  139. -- a.IsCQ
  140. --INTO #vw_s_JHQYDate
  141. --FROM dbo.s_Contract a WITH ( NOLOCK )
  142. -- INNER JOIN #Proj b ON b.projGUID = a.ProjGUID
  143. --WHERE a.Status = '激活';
  144. /* 计算货值信息 */
  145. SELECT --ROW_NUMBER() OVER ( PARTITION BY a.ProjGUID ORDER BY a.BldGUID ) sn ,
  146. a.ProjGUID AS FQProjGUID ,
  147. a.BldGUID ,
  148. CAST('' AS VARCHAR(100)) AS BldName ,
  149. CAST('' AS VARCHAR(50)) FirstLevelName ,
  150. CAST('' AS VARCHAR(50)) BProductTypeShortName ,
  151. a.BProductTypeCode ,
  152. CAST('' AS DATE) YszDate ,
  153. CAST('' AS DATE) OpeningDate ,
  154. SUM(CASE WHEN a.TotalDj <> 0 THEN 1
  155. END) AS HzCount ,
  156. SUM(CASE WHEN a.TotalDj <> 0 THEN a.BldArea
  157. END) AS HzArea ,
  158. SUM(CASE WHEN a.TotalDj <> 0
  159. AND a.Status NOT IN ( '认购' , '签约' , '草签' ) THEN a.TotalDj
  160. ELSE 0
  161. END) + SUM(CASE WHEN a.TotalDj <> 0
  162. AND a.Status = '认购' THEN c.CjTotal
  163. ELSE 0
  164. END) + SUM(CASE WHEN a.TotalDj <> 0
  165. AND a.Status IN ( '签约' , '草签' ) THEN d.HtTotal + ISNULL(d.SjBcTotal , 0)
  166. ELSE 0
  167. END) AS HzTotal ,
  168. SUM(CASE WHEN a.TotalDj <> 0
  169. AND ( a.Status <> '签约'
  170. OR ISNULL(d.IsCQ , 0) = 1 ) THEN 1
  171. END) AS WsCount ,
  172. SUM(CASE WHEN a.TotalDj <> 0
  173. AND ( a.Status <> '签约'
  174. OR ISNULL(d.IsCQ , 0) = 1 ) THEN a.BldArea
  175. END) AS WsArea ,
  176. SUM(CASE WHEN a.TotalDj <> 0
  177. AND a.Status NOT IN ( '认购' , '签约' ) THEN a.TotalDj
  178. ELSE 0
  179. END) + SUM(CASE WHEN a.TotalDj <> 0
  180. AND a.Status = '认购' THEN c.CjTotal
  181. ELSE 0
  182. END) + SUM(CASE WHEN a.TotalDj <> 0
  183. AND a.Status = '签约'
  184. AND ISNULL(d.IsCQ , 0) = 1 THEN d.HtTotal
  185. ELSE 0
  186. END) AS WsTotalDj
  187. INTO #Hz
  188. FROM dbo.p_Room a WITH ( NOLOCK )
  189. INNER JOIN #Proj p WITH ( NOLOCK ) ON p.projGUID = a.ProjGUID
  190. --JOIN p_Building g WITH ( NOLOCK ) ON a.BldGUID = g.BldGUID
  191. LEFT JOIN dbo.s_Order c WITH ( NOLOCK ) ON c.RoomGUID = a.RoomGUID
  192. AND c.Status = '激活'
  193. LEFT JOIN s_Contract d WITH ( NOLOCK ) ON d.RoomGUID = a.RoomGUID
  194. AND d.Status = '激活'
  195. LEFT JOIN p_BuildProductType F WITH ( NOLOCK ) ON a.BProductTypeCode = F.BProductTypeCode
  196. GROUP BY a.ProjGUID ,
  197. a.BldGUID ,
  198. a.BProductTypeCode;
  199. --F.FirstLevelName ,
  200. --F.BProductTypeShortName ,
  201. --F.BProductTypeCode ,
  202. --g.YszDate ,
  203. --g.OpeningDate;
  204. UPDATE a
  205. SET a.BldName = b.BldName ,
  206. a.YszDate = b.YszDate ,
  207. a.OpeningDate = b.OpeningDate ,
  208. a.FirstLevelName = F.FirstLevelName ,
  209. a.BProductTypeShortName = F.BProductTypeShortName
  210. FROM #Hz a
  211. LEFT JOIN dbo.p_Building b WITH ( NOLOCK ) ON b.BldGUID = a.BldGUID
  212. LEFT JOIN p_BuildProductType F WITH ( NOLOCK ) ON a.BProductTypeCode = F.BProductTypeCode;
  213. --DROP TABLE #vw_s_JHQYDate;
  214. --DROP TABLE #vw_s_JHRGDate;
  215. /* 合作项目信息 */
  216. SELECT projGUID ,
  217. my.ParamValue ishzxm
  218. INTO #hzxm1
  219. FROM myBizParamOption my WITH ( NOLOCK )
  220. INNER JOIN #Proj WITH ( NOLOCK ) ON projGUID = my.ScopeGUID
  221. WHERE my.ParamName = 's_CooperateProject';
  222. DECLARE @chuE DATE;
  223. SET @chuE = DATEADD(d , 1 - DATEPART(d , @endDate) , @endDate);
  224. --非期初数据
  225. SELECT A.BUGUID ,
  226. B.OrgGUID ,
  227. --供货
  228. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.SupplyTs
  229. ELSE 0
  230. END) , 0) SupplyTs ,
  231. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.SupplyArea
  232. ELSE 0
  233. END) , 0) SupplyArea ,
  234. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.SupplyAmount
  235. ELSE 0
  236. END) , 0) SupplyAmount ,
  237. --当期净认购
  238. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.OrderTs
  239. ELSE 0
  240. END) , 0) OrderTs ,
  241. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.OrderArea
  242. ELSE 0
  243. END) , 0) OrderArea ,
  244. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.OrderAmount
  245. ELSE 0
  246. END) , 0) AS OrderAmount ,
  247. --当期签约
  248. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.SignTs
  249. ELSE 0
  250. END) , 0) SignTs ,
  251. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.SignArea
  252. ELSE 0
  253. END) , 0) SignArea ,
  254. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.SignAmount
  255. ELSE 0
  256. END) , 0) AS SignAmount ,
  257. --当期回款
  258. ISNULL(SUM(CASE WHEN B.Day BETWEEN @begDate AND @endDate THEN B.RePayAmount
  259. ELSE 0
  260. END) , 0) RePayAmount ,
  261. --累计回款
  262. ISNULL(SUM(CASE WHEN B.Day <= @endDate THEN B.RePayAmount
  263. ELSE 0
  264. END) , 0) LjRePayAmount ,
  265. --累计净认购
  266. ISNULL(SUM(CASE WHEN B.Day <= @endDate THEN B.OrderTs
  267. ELSE 0
  268. END) , 0) LjOrderTs ,
  269. ISNULL(SUM(CASE WHEN B.Day <= @endDate THEN B.OrderArea
  270. ELSE 0
  271. END) , 0) LjOrderArea ,
  272. ISNULL(SUM(CASE WHEN B.Day <= @endDate THEN B.OrderAmount
  273. ELSE 0
  274. END) , 0) AS LjOrderAmount ,
  275. --累计签约
  276. ISNULL(SUM(CASE WHEN B.Day <= @endDate THEN B.SignTs
  277. ELSE 0
  278. END) , 0) LjSignTs ,
  279. ISNULL(SUM(CASE WHEN B.Day <= @endDate THEN B.SignArea
  280. ELSE 0
  281. END) , 0) LjSignArea ,
  282. ISNULL(SUM(CASE WHEN B.Day <= @endDate THEN B.SignAmount
  283. ELSE 0
  284. END) , 0) AS LjSignAmount ,
  285. --已推未售
  286. ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.SupplyTs
  287. ELSE 0
  288. END) , 0) - ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.OrderTs
  289. ELSE 0
  290. END) , 0) AS PushNoSaleTs ,
  291. ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.SupplyArea
  292. ELSE 0
  293. END) , 0) - ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.OrderArea
  294. ELSE 0
  295. END) , 0) AS PushNoSaleArea ,
  296. ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.SupplyAmount
  297. ELSE 0
  298. END) , 0) - ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.OrderAmount
  299. ELSE 0
  300. END) , 0) AS PushNoSaleAmount ,
  301. --已认未签
  302. ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.OrderTs
  303. ELSE 0
  304. END) , 0) - ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.SignTs
  305. ELSE 0
  306. END) , 0) AS OrderNoSignTs ,
  307. ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.OrderArea
  308. ELSE 0
  309. END) , 0) - ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.SignArea
  310. ELSE 0
  311. END) , 0) AS OrderNoSignArea ,
  312. ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.OrderAmount
  313. ELSE 0
  314. END) , 0) - ISNULL(SUM(CASE WHEN B.Day BETWEEN @chuE AND @endDate THEN B.SignAmount
  315. ELSE 0
  316. END) , 0) AS OrderNoSignAmount
  317. INTO #BudgetCooperate
  318. FROM s_Budget A WITH ( NOLOCK )
  319. INNER JOIN s_BudgetCooperate B WITH ( NOLOCK ) ON B.BudgetGUID = A.BudgetGUID
  320. INNER JOIN #Proj p WITH ( NOLOCK ) ON p.projGUID = B.OrgGUID
  321. WHERE A.BudgetTypeGUID = '合作预算'
  322. GROUP BY A.BUGUID ,
  323. B.OrgGUID;
  324. --期初数据
  325. SELECT A.BUGUID ,
  326. B.OrgGUID ,
  327. A.Year ,
  328. B.Month ,
  329. --已推未售
  330. SUM(B.PushNoSaleTs) AS PushNoSaleTs ,
  331. SUM(B.PushNoSaleArea) AS PushNoSaleArea ,
  332. SUM(B.PushNoSaleAmount) AS PushNoSaleAmount ,
  333. --已认未签
  334. SUM(B.OrderNoSignTs) AS OrderNoSignTs ,
  335. SUM(B.OrderNoSignArea) AS OrderNoSignArea ,
  336. SUM(B.OrderNoSignAmount) AS OrderNoSignAmount
  337. INTO #BudgetCooperateQc
  338. FROM s_Budget A WITH ( NOLOCK )
  339. INNER JOIN s_BudgetCooperateQc B WITH ( NOLOCK ) ON B.BudgetGUID = A.BudgetGUID
  340. INNER JOIN #Proj p WITH ( NOLOCK ) ON p.projGUID = B.OrgGUID
  341. WHERE A.BudgetTypeGUID = '合作预算'
  342. AND A.Year = YEAR(@endDate)
  343. AND B.Month = MONTH(@endDate)
  344. GROUP BY A.BUGUID ,
  345. B.OrgGUID ,
  346. A.Year ,
  347. B.Month;
  348. SELECT A.BUGUID ,
  349. A.FQProjGUID ,
  350. --供货
  351. B.SupplyTs ,
  352. B.SupplyArea ,
  353. B.SupplyAmount ,
  354. --当期认购
  355. B.OrderTs ,
  356. B.OrderArea ,
  357. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  358. WHEN ISNULL(B.OrderArea , 0) = 0 THEN 0
  359. ELSE B.OrderAmount * 100 / A.CheckRate / B.OrderArea
  360. END AS OrderAveragePrice ,
  361. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  362. ELSE B.OrderAmount * 100 / A.CheckRate
  363. END AS OrderAmount ,
  364. --当期签约
  365. B.SignTs ,
  366. B.SignArea ,
  367. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  368. WHEN ISNULL(B.SignArea , 0) = 0 THEN 0
  369. ELSE B.SignAmount * 100 / A.CheckRate / B.SignArea
  370. END AS SignAveragePrice ,
  371. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  372. ELSE B.SignAmount * 100 / A.CheckRate
  373. END AS SignAmount ,
  374. --累计认购
  375. B.LjOrderTs ,
  376. B.LjOrderArea ,
  377. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  378. WHEN ISNULL(B.LjOrderArea , 0) = 0 THEN 0
  379. ELSE B.LjOrderAmount * 100 / A.CheckRate / B.LjOrderArea
  380. END AS LjOrderAveragePrice ,
  381. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  382. ELSE B.LjOrderAmount * 100 / A.CheckRate
  383. END AS LjOrderAmount ,
  384. --累计签约
  385. B.LjSignTs ,
  386. B.LjSignArea ,
  387. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  388. WHEN ISNULL(B.LjSignArea , 0) = 0 THEN 0
  389. ELSE B.LjSignAmount * 100 / A.CheckRate / B.LjSignArea
  390. END AS LjSignAveragePrice ,
  391. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  392. ELSE B.LjSignAmount * 100 / A.CheckRate
  393. END AS LjSignAmount ,
  394. B.RePayAmount ,--当期回款
  395. B.LjRePayAmount ,--累计回款
  396. --已推未售
  397. ISNULL(C.PushNoSaleTs , 0) + ISNULL(B.PushNoSaleTs , 0) AS PushNoSaleTs ,
  398. ISNULL(C.PushNoSaleArea , 0) + ISNULL(B.PushNoSaleArea , 0) AS PushNoSaleArea ,
  399. ISNULL(C.PushNoSaleAmount , 0) + ISNULL(B.PushNoSaleAmount , 0) AS PushNoSaleYj ,
  400. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  401. ELSE ( ISNULL(B.PushNoSaleAmount , 0) + ISNULL(C.PushNoSaleAmount , 0) ) * 100 / A.CheckRate
  402. END AS PushNoSaleAmount ,
  403. ( ISNULL(B.PushNoSaleAmount , 0) + ISNULL(C.PushNoSaleAmount , 0) ) * 100 / NULLIF(A.CheckRate , 0) / NULLIF(ISNULL(C.PushNoSaleArea , 0)
  404. + ISNULL(B.PushNoSaleArea , 0) , 0) AS PushNoSaleAveragePrice ,
  405. --已认未签
  406. ISNULL(B.OrderNoSignTs , 0) + ISNULL(C.OrderNoSignTs , 0) AS OrderNoSignTs ,
  407. ISNULL(B.OrderNoSignArea , 0) + ISNULL(C.OrderNoSignArea , 0) AS OrderNoSignArea ,
  408. ISNULL(B.OrderNoSignAmount , 0) + ISNULL(C.OrderNoSignAmount , 0) AS OrderNoSignYj ,
  409. CASE WHEN ISNULL(A.CheckRate , 0) = 0 THEN 0
  410. ELSE ( ISNULL(B.OrderNoSignAmount , 0) + ISNULL(C.OrderNoSignAmount , 0) ) * 100 / A.CheckRate
  411. END AS OrderNoSignAmount ,
  412. ( ISNULL(B.OrderNoSignAmount , 0) + ISNULL(C.OrderNoSignAmount , 0) ) * 100 / NULLIF(A.CheckRate , 0) / NULLIF(ISNULL(B.OrderNoSignArea , 0)
  413. + ISNULL(C.OrderNoSignArea , 0) , 0) AS OrderNoSignAveragePrice
  414. INTO #HZXM
  415. FROM #BU A
  416. LEFT JOIN #BudgetCooperate B WITH ( NOLOCK ) ON B.BUGUID = A.BUGUID
  417. AND B.OrgGUID = A.FQProjGUID
  418. LEFT JOIN #BudgetCooperateQc C WITH ( NOLOCK ) ON C.BUGUID = A.BUGUID
  419. AND C.OrgGUID = A.FQProjGUID;
  420. SELECT T2.RoomGUID
  421. INTO #Attach_room
  422. FROM s_OCAttachRoom T2 WITH ( NOLOCK )
  423. INNER JOIN dbo.#RgRoomGUID T1 WITH ( NOLOCK ) ON T1.OrderGUID = T2.SaleGUID;
  424. --UNION ALL
  425. --SELECT T2.RoomGUID
  426. --FROM s_OCAttachRoom T2 WITH ( NOLOCK )
  427. -- INNER JOIN #QYRoomGUID T1 WITH ( NOLOCK ) ON T1.ContractGUID = T2.SaleGUID;
  428. --SELECT a.BldGUID ,
  429. -- a.YszDate
  430. --INTO #p_Building20190628
  431. --FROM p_Building a WITH ( NOLOCK )
  432. -- INNER JOIN #Proj P ON P.projGUID = a.ProjGUID
  433. --WHERE IsBld = 1
  434. -- AND a.YszDate IS NOT NULL;
  435. --SELECT a.ProjGUID FQProjGUID ,
  436. -- b.BldGUID ,
  437. -- a.RoomGUID ,
  438. -- a.BProductTypeCode ,
  439. --b.YszDate ,
  440. --a.BldArea ,
  441. --a.TotalDj ,
  442. --a.IsZiChiStatus
  443. --INTO #p_Room20190628
  444. --FROM p_Room a WITH ( NOLOCK )
  445. -- JOIN #p_Building20190628 b ON a.BldGUID = b.BldGUID;
  446. --SELECT b.ProjGUID ,
  447. -- b.BldGUID ,
  448. -- b.TotalDj ,
  449. -- b.BProductTypeCode ,
  450. -- b.YszDate ,
  451. -- b.BldArea ,
  452. -- b.TotalDj ,
  453. -- b.IsZiChiStatus
  454. --INTO #p_Room20190628
  455. --FROM #RoomGUID a
  456. -- INNER JOIN dbo.p_Room b ON b.RoomGUID = a.RoomGUID
  457. -- JOIN #p_Building20190628 bld ON b.BldGUID = bld.BldGUID;
  458. --SELECT DISTINCT
  459. -- t1.RoomGUID
  460. --INTO #TMRoom
  461. --FROM dbo.p_Room t1 WITH ( NOLOCK )
  462. -- LEFT JOIN #RgRoomGUID t2 WITH ( NOLOCK ) ON t2.RoomGUID = t1.RoomGUID
  463. -- LEFT JOIN #QYRoomGUID t3 ON t1.RoomGUID = t3.RoomGUID
  464. --WHERE t2.OrderGUID IS NULL
  465. -- AND t3.ContractGUID IS NULL
  466. -- AND ISNULL(t1.TotalDj, 0) = 0
  467. -- AND t1.IsZiChiStatus = 0;
  468. /* 草签信息 */
  469. --SELECT t2.BldGUID ,
  470. -- t2.BProductTypeCode
  471. -- --当期
  472. -- ,
  473. -- SUM(CASE WHEN B.TradeType = '签约'
  474. -- AND B.CloseReason IN ( '转草签', '草签退房' )
  475. -- AND B.QsDate BETWEEN @begDate AND @endDate
  476. -- THEN B.Ts
  477. -- ELSE 0
  478. -- END) AS cqts ,
  479. -- SUM(CASE WHEN B.TradeType = '签约'
  480. -- AND B.CloseReason IN ( '转草签', '草签退房' )
  481. -- AND B.QsDate BETWEEN @begDate AND @endDate
  482. -- THEN B.BldArea
  483. -- ELSE 0
  484. -- END) AS cqarea ,
  485. -- SUM(CASE WHEN B.TradeType = '签约'
  486. -- AND B.CloseReason IN ( '转草签', '草签退房' )
  487. -- AND B.QsDate BETWEEN @begDate AND @endDate
  488. -- THEN B.RmbAmount
  489. -- ELSE 0
  490. -- END) AS cqtotal ,
  491. ----SUM(CASE WHEN B.TradeType = '签约'
  492. ---- AND B.CloseReason = '草签退房'
  493. ---- AND B.QsDate BETWEEN @begDate AND @endDate THEN B.Ts
  494. ---- ELSE 0
  495. ---- END) AS cqtfts ,
  496. ----SUM(CASE WHEN B.TradeType = '签约'
  497. ---- AND B.CloseReason = '草签退房'
  498. ---- AND B.QsDate BETWEEN @begDate AND @endDate
  499. ---- THEN B.BldArea
  500. ---- ELSE 0
  501. ---- END) AS cqtfarea ,
  502. ----SUM(CASE WHEN B.TradeType = '签约'
  503. ---- AND B.CloseReason = '草签退房'
  504. ---- AND B.QsDate BETWEEN @begDate AND @endDate
  505. ---- THEN B.RmbAmount
  506. ---- ELSE 0
  507. ---- END) AS cqtftotal
  508. -- --从推盘日起 累计
  509. ----,
  510. -- SUM(CASE WHEN B.TradeType = '签约'
  511. -- AND B.CloseReason IN ( '转草签', '草签退房' )
  512. -- AND B.QsDate <= @endDate THEN B.Ts
  513. -- ELSE 0
  514. -- END) AS cqts_all ,
  515. -- SUM(CASE WHEN B.TradeType = '签约'
  516. -- AND B.CloseReason IN ( '转草签', '草签退房' )
  517. -- AND B.QsDate <= @endDate THEN B.BldArea
  518. -- ELSE 0
  519. -- END) AS cqarea_all ,
  520. -- SUM(CASE WHEN B.TradeType = '签约'
  521. -- AND B.CloseReason IN ( '转草签', '草签退房' )
  522. -- AND B.QsDate <= @endDate THEN B.RmbAmount
  523. -- ELSE 0
  524. -- END) AS cqtotal_all
  525. -- -- 从推盘日起 目前净草签
  526. -- ,
  527. -- SUM(CASE WHEN B.TradeType = '签约'
  528. -- AND B.CloseReason <> '面积补差'
  529. -- -- AND B.CloseReason LIKE '%草签%'
  530. -- -- AND B.CloseReason IN( '转草签','特批折扣','草签转签约','草签退房')--/2020.2.19调整/
  531. -- AND B.QsDate <= @endDate THEN B.Ts
  532. -- ELSE 0
  533. -- END) AS cqjhts_all ,
  534. -- SUM(CASE WHEN B.TradeType = '签约'
  535. -- AND B.CloseReason <> '面积补差'
  536. -- -- AND B.CloseReason LIKE '%草签%'
  537. -- -- AND B.CloseReason IN( '转草签','特批折扣','草签转签约','草签退房')--/2020.2.19调整/
  538. -- AND B.QsDate <= @endDate THEN B.BldArea
  539. -- ELSE 0
  540. -- END) AS cqjharea_all ,
  541. -- SUM(CASE WHEN B.TradeType = '签约'
  542. -- AND B.CloseReason <> '面积补差'
  543. -- --AND B.CloseReason LIKE '%草签%'
  544. -- --AND B.CloseReason IN( '转草签','特批折扣','草签转签约','草签退房')--/2020.2.19调整/
  545. -- AND B.QsDate <= @endDate THEN B.RmbAmount
  546. -- ELSE 0
  547. -- END) AS cqjhtotal_all
  548. -- --累计草签退房
  549. ----SUM(CASE WHEN B.TradeType = '签约'
  550. ---- AND B.CloseReason = '草签退房'
  551. ---- AND B.QsDate <= @endDate THEN B.Ts
  552. ---- ELSE 0
  553. ---- END) AS cqtfts_all ,
  554. ----SUM(CASE WHEN B.TradeType = '签约'
  555. ---- AND B.CloseReason = '草签退房'
  556. ---- AND B.QsDate <= @endDate THEN B.BldArea
  557. ---- ELSE 0
  558. ---- END) AS cqtfarea_all ,
  559. ----SUM(CASE WHEN B.TradeType = '签约'
  560. ---- AND B.CloseReason = '草签退房'
  561. ---- AND B.QsDate <= @endDate THEN B.RmbAmount
  562. ---- ELSE 0
  563. ---- END) AS cqtftotal_all
  564. --INTO #cq
  565. --FROM dbo.s_Contract WITH ( NOLOCK )
  566. -- INNER JOIN #Proj p ON p.projGUID = s_Contract.ProjGUID
  567. -- INNER JOIN p_Room t2 WITH ( NOLOCK ) ON s_Contract.RoomGUID = t2.RoomGUID
  568. -- INNER JOIN dbo.s_SaleHSData B WITH ( NOLOCK ) ON s_Contract.TradeGUID = B.TradeGUID
  569. -- AND ContractGUID = B.SaleGUID
  570. --WHERE B.TradeType = '签约'
  571. -- AND IsCQ = 1
  572. --GROUP BY t2.BldGUID ,
  573. -- t2.BProductTypeCode;
  574. /* 草签业绩 */
  575. DECLARE @bdate DATE ,
  576. @edate DATE;
  577. SELECT @bdate = DATEADD(DAY , -1 , @begDate) ,
  578. @edate = @endDate;
  579. PRINT @bdate;
  580. PRINT @edate;
  581. SELECT ProjectGUID ,
  582. s_SpecialTransactionRoom.RoomGUID ,
  583. CASE WHEN ISNULL(s_Order.QSDate , '2020-10-01') >= '2020-10-01'
  584. AND CAST(s_Order.QSDate AS DATE) BETWEEN CAST(StartDate AS DATE)
  585. AND CAST(s_SpecialTransaction.EndDate AS DATE) THEN 1
  586. ELSE 0
  587. END AS bxflag ,
  588. s_Order.TradeGUID ,
  589. StartDate ,
  590. s_SpecialTransaction.EndDate ,
  591. ProgrammeName,QSDate
  592. INTO #c
  593. FROM dbo.s_SpecialTransaction
  594. INNER JOIN dbo.s_SpecialTransactionRoom ON s_SpecialTransactionRoom.SpecialTransactionGuid = s_SpecialTransaction.SpecialTransactionGUID
  595. INNER JOIN #Proj ON ProjGUID = ProjectGUID
  596. LEFT JOIN s_Trade ON s_Trade.RoomGUID = s_SpecialTransactionRoom.RoomGUID
  597. LEFT JOIN s_Order ON s_Order.OrderGUID = RGOrderGUID
  598. WHERE ApproveState = '已审批';
  599. SELECT aa.SaleGUID ,
  600. SUM(CASE WHEN ( ItemName = '银行按揭'
  601. OR ItemName = '%装修款按揭%'--20200820调整新增装修款按揭
  602. OR ItemName = '车位信用卡分期'
  603. OR ItemName = '精装修贷款' )
  604. AND CAST(GetDate AS DATE) BETWEEN @begDate AND @endDate THEN aa.RmbAmount
  605. ELSE 0
  606. END) AS AjHkTotal ,
  607. SUM(CASE WHEN ItemName = '公积金'
  608. AND CAST(GetDate AS DATE) BETWEEN @begDate AND @endDate THEN aa.RmbAmount
  609. ELSE 0
  610. END) AS GjjHkTotal ,
  611. SUM(CASE WHEN ItemType = '非贷款类房款'
  612. AND ItemName <> '补差款'
  613. AND CAST(GetDate AS DATE) BETWEEN @begDate AND @endDate THEN aa.RmbAmount
  614. ELSE 0
  615. END) AS HkTotal ,
  616. SUM(CASE WHEN ( aa.ItemType = '非贷款类房款'
  617. AND ItemName = '补差款' )
  618. AND CAST(GetDate AS DATE) BETWEEN @begDate AND @endDate THEN aa.RmbAmount
  619. ELSE 0
  620. END) AS bckTotal ,
  621. SUM(CASE WHEN ( ItemName = '银行按揭'
  622. OR ItemName = '%装修款按揭%'--20200820调整新增装修款按揭
  623. OR ItemName = '车位信用卡分期'
  624. OR ItemName = '精装修贷款' )
  625. AND CAST(GetDate AS DATE) <= @endDate THEN aa.RmbAmount
  626. ELSE 0
  627. END) AS ljAjHkTotal ,
  628. SUM(CASE WHEN ( aa.ItemType = '非贷款类房款'
  629. AND ItemName = '补差款' )
  630. AND CAST(GetDate AS DATE) <= @endDate THEN aa.RmbAmount
  631. ELSE 0
  632. END) AS ljbckTotal ,
  633. SUM(CASE WHEN ItemName = '公积金'
  634. AND CAST(GetDate AS DATE) <= @endDate THEN aa.RmbAmount
  635. ELSE 0
  636. END) AS ljGjjHkTotal ,
  637. SUM(CASE WHEN ItemType = '非贷款类房款'
  638. AND ItemName <> '补差款'
  639. AND CAST(GetDate AS DATE) <= @endDate THEN aa.RmbAmount
  640. ELSE 0
  641. END) AS ljHkTotal ,
  642. SUM(CASE WHEN CAST(GetDate AS DATE) <= @bdate
  643. AND ( t02.TradeStatus = '激活'
  644. OR ISNULL(t3.CloseDate , t4.CloseDate) > @bdate ) THEN aa.Amount
  645. ELSE 0
  646. END) AS getamount_begin ,
  647. SUM(CASE WHEN CAST(GetDate AS DATE) <= @edate
  648. AND ( t02.TradeStatus = '激活'
  649. OR ISNULL(t3.CloseDate , t4.CloseDate) > @edate ) THEN aa.Amount
  650. ELSE 0
  651. END) AS getamount_end ,
  652. --SUM(CASE WHEN bxflag = 1
  653. -- AND GetDate BETWEEN @begDate AND @endDate THEN aa.Amount
  654. -- ELSE 0
  655. -- END) AS getamount_bx ,
  656. --SUM(CASE WHEN bxflag = 1
  657. -- AND GetDate <= @endDate THEN aa.Amount
  658. -- ELSE 0
  659. -- END) AS getamount_bx_1
  660. SUM(CASE WHEN bxflag = 1
  661. AND CAST(GetDate AS DATE) BETWEEN @begDate AND @endDate THEN aa.Amount
  662. ELSE 0
  663. END) AS getamount_bx ,
  664. SUM(CASE WHEN bxflag = 1
  665. AND CAST(GetDate AS DATE) <= @endDate THEN aa.Amount
  666. ELSE 0
  667. END) AS getamount_bx_1 ,
  668. SUM(CASE WHEN bxflag = 1
  669. AND CAST(GetDate AS DATE) < @begDate THEN aa.Amount
  670. ELSE 0
  671. END) AS getamount_bx_begin
  672. INTO #getintemp
  673. FROM s_Getin aa WITH ( NOLOCK )
  674. INNER JOIN #BU P WITH ( NOLOCK ) ON P.FQProjGUID = aa.ProjGUID
  675. INNER JOIN dbo.s_Trade t02 WITH ( NOLOCK ) ON aa.SaleGUID = t02.TradeGUID
  676. LEFT JOIN s_Contract t3 WITH ( NOLOCK ) ON t02.ContractGUID = t3.ContractGUID
  677. LEFT JOIN s_Order t4 WITH ( NOLOCK ) ON t02.RGOrderGUID = t4.OrderGUID
  678. LEFT JOIN #c ON #c.TradeGUID = t02.TradeGUID
  679. WHERE aa.ItemType IN ( '贷款类房款' , '非贷款类房款' )
  680. AND ISNULL(aa.Status , '') <> '作废'
  681. GROUP BY aa.SaleGUID;
  682. --select top 100 * from #getintemp WHERE SaleGUID='2EFEA685-314B-EB11-B392-005056834EAD'
  683. SELECT DISTINCT
  684. s_Order.TradeGUID ,
  685. Roominfo ,
  686. #c.RoomGUID ,
  687. BldGUID ,
  688. CONVERT(VARCHAR(100) , ExecDate , 23) ExecDate
  689. INTO #BG
  690. FROM #c
  691. INNER JOIN dbo.s_SaleModiApply ON s_SaleModiApply.RoomGUID = #c.RoomGUID
  692. INNER JOIN #BU p ON p.FQProjGUID = s_SaleModiApply.ProjGUID
  693. INNER JOIN p_Room ON p_Room.RoomGUID = #c.RoomGUID
  694. INNER JOIN s_Order ON SaleGUID = OrderGUID
  695. WHERE ApplyType = '增减权益人'
  696. AND CAST(ExecDate AS DATE) <= @endDate
  697. AND bxflag = 1
  698. UNION
  699. SELECT DISTINCT
  700. s_Contract.TradeGUID ,
  701. Roominfo ,
  702. #c.RoomGUID ,
  703. BldGUID ,
  704. CONVERT(VARCHAR(100) , ExecDate , 23) ExecDate
  705. FROM #c
  706. INNER JOIN dbo.s_Contract ON s_Contract.RoomGUID = #c.RoomGUID
  707. INNER JOIN dbo.s_SaleModiApply ON SaleGUID = ContractGUID
  708. INNER JOIN p_Room ON p_Room.RoomGUID = #c.RoomGUID
  709. INNER JOIN #BU p ON p.FQProjGUID = s_SaleModiApply.ProjGUID
  710. WHERE ApplyType = '增减权益人'
  711. AND CAST(ExecDate AS DATE) <= @endDate
  712. AND bxflag = 1;
  713. SELECT CASE WHEN ISNULL(QSDate , '2020-10-01') >= '2020-10-01'
  714. AND CAST(QSDate AS DATE) BETWEEN CAST(StartDate AS DATE) AND CAST(EndDate AS DATE)
  715. AND ExecDate >= @endDate THEN 1
  716. ELSE 0
  717. END AS bxflag ,
  718. #c.TradeGUID ,
  719. #c.RoomGUID ,
  720. ProjectGUID ,
  721. ProgrammeName ,
  722. StartDate ,
  723. EndDate
  724. INTO #d
  725. FROM #c
  726. LEFT JOIN #BG ON #BG.TradeGUID = #c.TradeGUID;
  727. SELECT a.BldGUID ,
  728. a.BProductTypeCode ,
  729. ISNULL(SUM(CASE WHEN bx.TradeGUID IS NOT NULL
  730. AND ExecDate <= @endDate
  731. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  732. WHEN bx.TradeGUID IS NOT NULL
  733. AND ExecDate > @endDate
  734. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  735. WHEN bx.TradeGUID IS NULL
  736. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  737. ELSE 0
  738. END) , 0) - ISNULL(SUM(CASE WHEN bx.TradeGUID IS NOT NULL
  739. AND ExecDate <= @begDate
  740. AND CAST(b.QsDate AS DATE) < @begDate THEN b.RmbAmount
  741. WHEN bx.TradeGUID IS NOT NULL
  742. AND ExecDate > @begDate
  743. AND CAST(b.QsDate AS DATE) < @begDate THEN ABS(hk.getamount_bx_begin) * b.Ts
  744. WHEN bx.TradeGUID IS NULL
  745. AND CAST(b.QsDate AS DATE) < @begDate THEN ABS(hk.getamount_bx_begin) * b.Ts
  746. ELSE 0
  747. END) , 0) AS RgTotal ,
  748. SUM(CASE WHEN bx.TradeGUID IS NOT NULL THEN 1
  749. ELSE 0
  750. END) AS bgstatus ,
  751. SUM(CASE WHEN CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.Ts
  752. ELSE 0
  753. END) ts ,
  754. SUM(CASE WHEN CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.BldArea
  755. ELSE 0
  756. END) area ,
  757. ISNULL(SUM(CASE WHEN bx.TradeGUID IS NOT NULL
  758. AND ExecDate <= @endDate
  759. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  760. WHEN bx.TradeGUID IS NOT NULL
  761. AND ExecDate > @endDate
  762. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  763. WHEN bx.TradeGUID IS NULL
  764. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  765. ELSE 0
  766. END) , 0) rgtotal_lj ,
  767. SUM(CASE WHEN CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  768. ELSE 0
  769. END) ts_lj ,
  770. SUM(CASE WHEN CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  771. ELSE 0
  772. END) area_lj ,
  773. SUM(CASE WHEN b.TradeType = '签约'
  774. AND c.IsCQ = 0
  775. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.Ts
  776. ELSE 0
  777. END) AS QyCount ,
  778. SUM(ISNULL(CASE WHEN b.TradeType = '签约'
  779. AND c.IsCQ = 0 THEN CASE WHEN bx.TradeGUID IS NOT NULL
  780. AND ExecDate <= @endDate
  781. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  782. WHEN bx.TradeGUID IS NOT NULL
  783. AND ExecDate > @endDate
  784. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  785. WHEN bx.TradeGUID IS NULL
  786. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  787. ELSE 0
  788. END
  789. ELSE 0
  790. END , 0)) - SUM(ISNULL(CASE WHEN b.TradeType = '签约'
  791. AND c.IsCQ = 0
  792. THEN CASE WHEN bx.TradeGUID IS NOT NULL
  793. AND ExecDate <= @begDate
  794. AND CAST(b.QsDate AS DATE) <= @begDate THEN b.RmbAmount
  795. WHEN bx.TradeGUID IS NOT NULL
  796. AND ExecDate > @begDate
  797. AND CAST(b.QsDate AS DATE) <= @begDate THEN ABS(hk.getamount_bx_begin) * b.Ts
  798. WHEN bx.TradeGUID IS NULL
  799. AND CAST(b.QsDate AS DATE) <= @begDate THEN ABS(hk.getamount_bx_begin) * b.Ts
  800. ELSE 0
  801. END
  802. ELSE 0
  803. END , 0)) AS QyTotal ,
  804. SUM(CASE WHEN b.TradeType = '签约'
  805. AND c.IsCQ = 0
  806. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.BldArea
  807. ELSE 0
  808. END) AS QyArea ,
  809. SUM(CASE WHEN b.TradeType = '签约'
  810. AND c.IsCQ = 0
  811. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  812. ELSE 0
  813. END) AS QyCount_lj ,
  814. SUM(ISNULL(CASE WHEN b.TradeType = '签约'
  815. AND c.IsCQ = 0 THEN CASE WHEN bx.TradeGUID IS NOT NULL
  816. AND ExecDate <= @endDate
  817. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  818. WHEN bx.TradeGUID IS NOT NULL
  819. AND ExecDate > @endDate
  820. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  821. WHEN bx.TradeGUID IS NULL
  822. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  823. ELSE 0
  824. END
  825. ELSE 0
  826. END , 0)) AS QyTotal_lj ,
  827. SUM(CASE WHEN b.TradeType = '签约'
  828. AND c.IsCQ = 0
  829. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  830. ELSE 0
  831. END) AS QyArea_lj ,
  832. --草签信息
  833. SUM(CASE WHEN b.TradeType = '签约'
  834. AND c.IsCQ = 1
  835. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  836. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.Ts
  837. ELSE 0
  838. END) AS cqts ,
  839. SUM(CASE WHEN b.TradeType = '签约'
  840. AND c.IsCQ = 1
  841. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  842. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.BldArea
  843. ELSE 0
  844. END) AS cqarea ,
  845. SUM(ISNULL(CASE WHEN b.TradeType = '签约'
  846. AND c.IsCQ = 1 THEN CASE WHEN bx.TradeGUID IS NOT NULL
  847. AND ExecDate <= @endDate
  848. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  849. WHEN bx.TradeGUID IS NOT NULL
  850. AND ExecDate > @endDate
  851. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  852. WHEN bx.TradeGUID IS NULL
  853. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  854. ELSE 0
  855. END
  856. ELSE 0
  857. END , 0)) - SUM(ISNULL(CASE WHEN b.TradeType = '签约'
  858. AND c.IsCQ = 1
  859. THEN CASE WHEN bx.TradeGUID IS NOT NULL
  860. AND ExecDate <= @begDate
  861. AND CAST(b.QsDate AS DATE) <= @begDate THEN b.RmbAmount
  862. WHEN bx.TradeGUID IS NOT NULL
  863. AND ExecDate > @begDate
  864. AND CAST(b.QsDate AS DATE) <= @begDate THEN ABS(hk.getamount_bx_begin) * b.Ts
  865. WHEN bx.TradeGUID IS NULL
  866. AND CAST(b.QsDate AS DATE) <= @begDate THEN ABS(hk.getamount_bx_begin) * b.Ts
  867. ELSE 0
  868. END
  869. ELSE 0
  870. END , 0)) AS cqtotal ,
  871. SUM(CASE WHEN b.TradeType = '签约'
  872. AND c.IsCQ = 1
  873. --AND b.CloseReason IN ( '转草签' , '草签退房' )
  874. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  875. ELSE 0
  876. END) AS cqts_all ,
  877. SUM(CASE WHEN b.TradeType = '签约'
  878. AND c.IsCQ = 1
  879. --AND b.CloseReason IN ( '转草签' , '草签退房' )
  880. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  881. ELSE 0
  882. END) AS cqarea_all ,
  883. SUM(CASE WHEN b.TradeType = '签约'
  884. AND c.IsCQ = 1 THEN CASE WHEN bx.TradeGUID IS NOT NULL
  885. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  886. WHEN bx.TradeGUID IS NULL
  887. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx) * b.Ts
  888. ELSE 0
  889. END
  890. ELSE 0
  891. END) AS cqtotal_all ,
  892. SUM(CASE WHEN b.TradeType = '认购'
  893. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  894. ELSE 0
  895. END) AS LjRgJhCount ,
  896. SUM(CASE WHEN b.TradeType = '认购'
  897. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  898. ELSE 0
  899. END) AS LjRgJhArea ,
  900. SUM(CASE WHEN b.TradeType = '认购'
  901. AND CAST(b.QsDate AS DATE) <= @endDate THEN CASE WHEN bx.TradeGUID IS NOT NULL
  902. AND ExecDate <= @endDate
  903. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  904. WHEN bx.TradeGUID IS NOT NULL
  905. AND ExecDate > @endDate
  906. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  907. WHEN bx.TradeGUID IS NULL
  908. AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(hk.getamount_bx_1) * b.Ts
  909. ELSE 0
  910. END
  911. ELSE 0
  912. END) AS LjRgJhTotal
  913. INTO #bx
  914. FROM s_SaleHSData b WITH ( NOLOCK )
  915. INNER JOIN #BU p ON p.FQProjGUID = b.ProjGUID
  916. INNER JOIN p_Room a WITH ( NOLOCK ) ON a.RoomGUID = b.RoomGUID
  917. LEFT JOIN s_Contract c WITH ( NOLOCK ) ON b.SaleGUID = c.ContractGUID
  918. LEFT JOIN #BG bx ON bx.TradeGUID = b.TradeGUID
  919. LEFT JOIN #getintemp hk ON hk.SaleGUID = b.TradeGUID
  920. WHERE CAST(b.QsDate AS DATE) <= @endDate
  921. AND b.TradeGUID IN ( SELECT TradeGUID
  922. FROM #d
  923. WHERE bxflag = 1
  924. AND TradeGUID IS NOT NULL )
  925. GROUP BY a.BldGUID ,
  926. a.BProductTypeCode;
  927. -- SELECT * from #bx
  928. /* 初始化交易信息 */
  929. SELECT *
  930. INTO #Trade
  931. FROM ( SELECT a.BldGUID ,
  932. a.BProductTypeCode ,
  933. --期间净认购
  934. SUM(CASE WHEN CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.Ts
  935. ELSE 0
  936. END) AS RgCount ,
  937. SUM(CASE WHEN CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.BldArea
  938. ELSE 0
  939. END) AS RgArea ,
  940. SUM(CASE WHEN CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.RmbAmount
  941. ELSE 0
  942. END) AS RgTotal
  943. --SUM(CASE WHEN s_Order.CustomerType = '包销'
  944. -- AND bx.TradeGUID IS NOT NULL
  945. -- AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate
  946. -- THEN b.RmbAmount
  947. -- WHEN s_Order.CustomerType = '包销'
  948. -- AND bx.TradeGUID IS NULL
  949. -- AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate
  950. -- THEN #getintemp.getamount_bx
  951. -- WHEN CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate
  952. -- THEN b.RmbAmount
  953. -- ELSE 0
  954. -- END) AS RgTotal
  955. --从推盘日起 累计净认购
  956. ,
  957. SUM(CASE WHEN CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  958. ELSE 0
  959. END) AS LjRgCount ,
  960. SUM(CASE WHEN CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  961. ELSE 0
  962. END) AS LjRgArea ,
  963. SUM(CASE WHEN CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  964. ELSE 0
  965. END) AS LjRgTotal
  966. --从推盘日起 累计激活认购(累计认购未签约)
  967. ,
  968. SUM(CASE WHEN b.TradeType = '认购'
  969. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  970. ELSE 0
  971. END) AS LjRgJhCount ,
  972. SUM(CASE WHEN b.TradeType = '认购'
  973. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  974. ELSE 0
  975. END) AS LjRgJhArea ,
  976. SUM(CASE WHEN b.TradeType = '认购'
  977. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  978. ELSE 0
  979. END) AS LjRgJhTotal
  980. --当期激活签约
  981. ,
  982. -- SUM(CASE WHEN b.TradeType = '签约'
  983. -- AND b.CloseReason = '转签约'
  984. -- AND b.Ts = 1
  985. -- AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate
  986. -- THEN b.Ts
  987. -- ELSE 0
  988. -- END) AS QyHtCount ,
  989. -- SUM(CASE WHEN b.TradeType = '签约'
  990. -- AND b.CloseReason = '转签约'
  991. -- AND b.Ts = 1
  992. -- AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate
  993. -- THEN b.RmbAmount
  994. -- ELSE 0
  995. -- END) AS QyHtTotal ,
  996. -- SUM(CASE WHEN b.TradeType = '签约'
  997. -- AND b.CloseReason = '转签约'
  998. -- AND b.Ts = 1
  999. -- AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate
  1000. -- THEN b.BldArea
  1001. -- ELSE 0
  1002. -- END) AS QyHtArea
  1003. ----期间净签约
  1004. -- ,
  1005. SUM(CASE WHEN b.TradeType = '签约'
  1006. -- AND b.CloseReason NOT LIKE '%草签%'
  1007. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1008. AND IsCQ = 0
  1009. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.Ts
  1010. ELSE 0
  1011. END) AS QyCount ,
  1012. SUM(CASE WHEN b.TradeType = '签约'
  1013. --AND b.CloseReason NOT LIKE '%草签%'
  1014. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1015. AND IsCQ = 0
  1016. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.RmbAmount
  1017. ELSE 0
  1018. END) AS QyTotal ,
  1019. SUM(CASE WHEN b.TradeType = '签约'
  1020. --AND b.CloseReason NOT LIKE '%草签%'
  1021. --AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1022. AND IsCQ = 0
  1023. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.BldArea
  1024. ELSE 0
  1025. END) AS QyArea
  1026. --从推盘日期起累计净签约
  1027. ,
  1028. SUM(CASE WHEN b.TradeType = '签约'
  1029. --AND b.CloseReason NOT LIKE '%草签%'
  1030. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1031. AND IsCQ = 0
  1032. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  1033. ELSE 0
  1034. END) AS LjQyCount ,
  1035. SUM(CASE WHEN b.TradeType = '签约'
  1036. --AND b.CloseReason NOT LIKE '%草签%'
  1037. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1038. AND IsCQ = 0
  1039. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  1040. ELSE 0
  1041. END) AS LjQyTotal ,
  1042. SUM(CASE WHEN b.TradeType = '签约'
  1043. --AND b.CloseReason NOT LIKE '%草签%'
  1044. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1045. AND IsCQ = 0
  1046. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  1047. ELSE 0
  1048. END) AS LjQyArea
  1049. --期间签约退房
  1050. -- ,
  1051. -- SUM(CASE WHEN b.TradeType = '签约'
  1052. -- AND b.CloseReason = '退房'
  1053. -- AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate
  1054. -- THEN ABS(b.Ts)
  1055. -- ELSE 0
  1056. -- END) AS QyTfCount ,
  1057. -- SUM(CASE WHEN b.TradeType = '签约'
  1058. -- AND b.CloseReason = '退房'
  1059. -- AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate
  1060. -- THEN ABS(b.RmbAmount)
  1061. -- ELSE 0
  1062. -- END) AS QyTfTotal ,
  1063. -- SUM(CASE WHEN b.TradeType = '签约'
  1064. -- AND b.CloseReason = '退房'
  1065. -- AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate
  1066. -- THEN ABS(b.BldArea)
  1067. -- ELSE 0
  1068. -- END) AS QyTfArea
  1069. ----累计签约退房
  1070. -- ,
  1071. -- SUM(CASE WHEN b.TradeType = '签约'
  1072. -- AND b.CloseReason = '退房'
  1073. -- AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(b.Ts)
  1074. -- ELSE 0
  1075. -- END) AS LjQyTfCount ,
  1076. -- SUM(CASE WHEN b.TradeType = '签约'
  1077. -- AND b.CloseReason = '退房'
  1078. -- AND CAST(b.QsDate AS DATE) <= @endDate
  1079. -- THEN ABS(b.RmbAmount)
  1080. -- ELSE 0
  1081. -- END) AS LjQyTfTotal ,
  1082. -- SUM(CASE WHEN b.TradeType = '签约'
  1083. -- AND b.CloseReason = '退房'
  1084. -- AND CAST(b.QsDate AS DATE) <= @endDate THEN ABS(b.BldArea)
  1085. -- ELSE 0
  1086. -- END) AS LjQyTfArea
  1087. --草签信息
  1088. ,
  1089. SUM(CASE WHEN b.TradeType = '签约'
  1090. AND c.IsCQ = 1
  1091. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  1092. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.Ts
  1093. ELSE 0
  1094. END) AS cqts ,
  1095. SUM(CASE WHEN b.TradeType = '签约'
  1096. AND c.IsCQ = 1
  1097. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  1098. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.BldArea
  1099. ELSE 0
  1100. END) AS cqarea ,
  1101. SUM(CASE WHEN b.TradeType = '签约'
  1102. AND c.IsCQ = 1
  1103. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  1104. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.RmbAmount
  1105. ELSE 0
  1106. END) AS cqtotal ,
  1107. SUM(CASE WHEN b.TradeType = '签约'
  1108. AND c.IsCQ = 1
  1109. --AND b.CloseReason IN ( '转草签' , '草签退房' )
  1110. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  1111. ELSE 0
  1112. END) AS cqts_all ,
  1113. SUM(CASE WHEN b.TradeType = '签约'
  1114. AND c.IsCQ = 1
  1115. --AND b.CloseReason IN ( '转草签' , '草签退房' )
  1116. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  1117. ELSE 0
  1118. END) AS cqarea_all ,
  1119. SUM(CASE WHEN b.TradeType = '签约'
  1120. AND c.IsCQ = 1
  1121. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  1122. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  1123. ELSE 0
  1124. END) AS cqtotal_all
  1125. -- 从推盘日起 目前净草签
  1126. ,
  1127. SUM(CASE WHEN b.TradeType = '签约'
  1128. AND c.IsCQ = 1
  1129. AND b.CloseReason <> '面积补差'
  1130. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  1131. ELSE 0
  1132. END) AS cqjhts_all ,
  1133. SUM(CASE WHEN b.TradeType = '签约'
  1134. AND c.IsCQ = 1
  1135. AND b.CloseReason <> '面积补差'
  1136. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  1137. ELSE 0
  1138. END) AS cqjharea_all ,
  1139. SUM(CASE WHEN b.TradeType = '签约'
  1140. AND c.IsCQ = 1
  1141. AND b.CloseReason <> '面积补差'
  1142. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  1143. ELSE 0
  1144. END) AS cqjhtotal_all
  1145. FROM s_SaleHSData b WITH ( NOLOCK )
  1146. INNER JOIN #Proj p ON p.projGUID = b.ProjGUID
  1147. INNER JOIN p_Room a WITH ( NOLOCK ) ON a.RoomGUID = b.RoomGUID
  1148. LEFT JOIN s_Contract c WITH ( NOLOCK ) ON b.SaleGUID = c.ContractGUID
  1149. WHERE CAST(b.QsDate AS DATE) <= @endDate
  1150. AND b.TradeGUID NOT IN ( SELECT TradeGUID
  1151. FROM #d
  1152. WHERE bxflag = 1
  1153. AND TradeGUID IS NOT NULL )
  1154. GROUP BY a.BldGUID ,
  1155. a.BProductTypeCode ) moko;
  1156. /* 初始化交易信息 */
  1157. SELECT *
  1158. INTO #Trade_fbx
  1159. FROM ( SELECT a.BldGUID ,
  1160. a.BProductTypeCode ,
  1161. --期间净认购
  1162. SUM(CASE WHEN CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.Ts
  1163. ELSE 0
  1164. END) AS RgCount ,
  1165. SUM(CASE WHEN CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.BldArea
  1166. ELSE 0
  1167. END) AS RgArea ,
  1168. SUM(CASE WHEN CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.RmbAmount
  1169. ELSE 0
  1170. END) AS RgTotal
  1171. --从推盘日起 累计净认购
  1172. ,
  1173. SUM(CASE WHEN CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  1174. ELSE 0
  1175. END) AS LjRgCount ,
  1176. SUM(CASE WHEN CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  1177. ELSE 0
  1178. END) AS LjRgArea ,
  1179. SUM(CASE WHEN CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  1180. ELSE 0
  1181. END) AS LjRgTotal
  1182. --从推盘日起 累计激活认购(累计认购未签约)
  1183. ,
  1184. SUM(CASE WHEN b.TradeType = '认购'
  1185. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  1186. ELSE 0
  1187. END) AS LjRgJhCount ,
  1188. SUM(CASE WHEN b.TradeType = '认购'
  1189. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  1190. ELSE 0
  1191. END) AS LjRgJhArea ,
  1192. SUM(CASE WHEN b.TradeType = '认购'
  1193. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  1194. ELSE 0
  1195. END) AS LjRgJhTotal ,
  1196. SUM(CASE WHEN b.TradeType = '签约'
  1197. -- AND b.CloseReason NOT LIKE '%草签%'
  1198. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1199. AND IsCQ = 0
  1200. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.Ts
  1201. ELSE 0
  1202. END) AS QyCount ,
  1203. SUM(CASE WHEN b.TradeType = '签约'
  1204. --AND b.CloseReason NOT LIKE '%草签%'
  1205. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1206. AND IsCQ = 0
  1207. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.RmbAmount
  1208. ELSE 0
  1209. END) AS QyTotal ,
  1210. SUM(CASE WHEN b.TradeType = '签约'
  1211. --AND b.CloseReason NOT LIKE '%草签%'
  1212. --AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1213. AND IsCQ = 0
  1214. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.BldArea
  1215. ELSE 0
  1216. END) AS QyArea
  1217. --从推盘日期起累计净签约
  1218. ,
  1219. SUM(CASE WHEN b.TradeType = '签约'
  1220. --AND b.CloseReason NOT LIKE '%草签%'
  1221. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1222. AND IsCQ = 0
  1223. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  1224. ELSE 0
  1225. END) AS LjQyCount ,
  1226. SUM(CASE WHEN b.TradeType = '签约'
  1227. --AND b.CloseReason NOT LIKE '%草签%'
  1228. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1229. AND IsCQ = 0
  1230. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  1231. ELSE 0
  1232. END) AS LjQyTotal ,
  1233. SUM(CASE WHEN b.TradeType = '签约'
  1234. --AND b.CloseReason NOT LIKE '%草签%'
  1235. -- AND b.CloseReason NOT IN ( '草签退房' , '草签转签约' , '转草签' )
  1236. AND IsCQ = 0
  1237. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  1238. ELSE 0
  1239. END) AS LjQyArea ,
  1240. SUM(CASE WHEN b.TradeType = '签约'
  1241. AND c.IsCQ = 1
  1242. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  1243. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.Ts
  1244. ELSE 0
  1245. END) AS cqts ,
  1246. SUM(CASE WHEN b.TradeType = '签约'
  1247. AND c.IsCQ = 1
  1248. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  1249. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.BldArea
  1250. ELSE 0
  1251. END) AS cqarea ,
  1252. SUM(CASE WHEN b.TradeType = '签约'
  1253. AND c.IsCQ = 1
  1254. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  1255. AND CAST(b.QsDate AS DATE) BETWEEN @begDate AND @endDate THEN b.RmbAmount
  1256. ELSE 0
  1257. END) AS cqtotal ,
  1258. SUM(CASE WHEN b.TradeType = '签约'
  1259. AND c.IsCQ = 1
  1260. --AND b.CloseReason IN ( '转草签' , '草签退房' )
  1261. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  1262. ELSE 0
  1263. END) AS cqts_all ,
  1264. SUM(CASE WHEN b.TradeType = '签约'
  1265. AND c.IsCQ = 1
  1266. --AND b.CloseReason IN ( '转草签' , '草签退房' )
  1267. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  1268. ELSE 0
  1269. END) AS cqarea_all ,
  1270. SUM(CASE WHEN b.TradeType = '签约'
  1271. AND c.IsCQ = 1
  1272. -- AND b.CloseReason IN ( '转草签' , '草签退房' )
  1273. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  1274. ELSE 0
  1275. END) AS cqtotal_all
  1276. -- 从推盘日起 目前净草签
  1277. ,
  1278. SUM(CASE WHEN b.TradeType = '签约'
  1279. AND c.IsCQ = 1
  1280. AND b.CloseReason <> '面积补差'
  1281. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.Ts
  1282. ELSE 0
  1283. END) AS cqjhts_all ,
  1284. SUM(CASE WHEN b.TradeType = '签约'
  1285. AND c.IsCQ = 1
  1286. AND b.CloseReason <> '面积补差'
  1287. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.BldArea
  1288. ELSE 0
  1289. END) AS cqjharea_all ,
  1290. SUM(CASE WHEN b.TradeType = '签约'
  1291. AND c.IsCQ = 1
  1292. AND b.CloseReason <> '面积补差'
  1293. AND CAST(b.QsDate AS DATE) <= @endDate THEN b.RmbAmount
  1294. ELSE 0
  1295. END) AS cqjhtotal_all
  1296. FROM s_SaleHSData b WITH ( NOLOCK )
  1297. INNER JOIN #Proj p ON p.projGUID = b.ProjGUID
  1298. INNER JOIN p_Room a WITH ( NOLOCK ) ON a.RoomGUID = b.RoomGUID
  1299. LEFT JOIN s_Contract c WITH ( NOLOCK ) ON b.SaleGUID = c.ContractGUID
  1300. WHERE CAST(b.QsDate AS DATE) <= @endDate
  1301. GROUP BY a.BldGUID ,
  1302. a.BProductTypeCode ) moko;
  1303. -- select * from #Trade
  1304. --已开未售回溯(签约口径)
  1305. SELECT T1.ProjGUID AS FQProjGUID ,
  1306. T1.BldGUID ,
  1307. T1.BProductTypeCode ,
  1308. SUM(CASE WHEN CAST(bld.YszDate AS DATE) <= @endDate
  1309. --AND t2.OrderGUID IS NULL
  1310. --AND t3.ContractGUID IS NULL
  1311. THEN 1
  1312. ELSE 0
  1313. END) AS RgWsCount ,
  1314. SUM(CASE WHEN CAST(bld.YszDate AS DATE) <= @endDate
  1315. --AND t2.OrderGUID IS NULL
  1316. --AND t3.ContractGUID IS NULL
  1317. THEN T1.BldArea
  1318. ELSE 0
  1319. END) AS RgWsArea ,
  1320. SUM(CASE WHEN CAST(bld.YszDate AS DATE) <= @endDate
  1321. -- AND t2.OrderGUID IS NULL
  1322. -- AND t3.ContractGUID IS NULL
  1323. THEN T1.TotalDj
  1324. ELSE 0
  1325. END) AS RgWsTotalDj
  1326. --已开未售(签约口径)未定价
  1327. ,
  1328. SUM(CASE WHEN --t2.OrderGUID IS NULL
  1329. --AND t3.ContractGUID IS NULL
  1330. --AND
  1331. ISNULL(T1.TotalDj , 0) = 0 THEN 1
  1332. ELSE 0
  1333. END) AS RgWsCount_wdj ,
  1334. SUM(CASE WHEN --t2.OrderGUID IS NULL
  1335. --AND t3.ContractGUID IS NULL
  1336. --AND
  1337. ISNULL(T1.TotalDj , 0) = 0 THEN T1.BldArea
  1338. ELSE 0
  1339. END) AS RgWsArea_wdj
  1340. --已开未售(签约口径)已定价
  1341. ,
  1342. SUM(CASE WHEN --t2.OrderGUID IS NULL
  1343. --AND t3.ContractGUID IS NULL
  1344. --AND
  1345. ISNULL(T1.TotalDj , 0) <> 0 THEN 1
  1346. ELSE 0
  1347. END) AS RgWsCount_ydj ,
  1348. SUM(CASE WHEN --t2.OrderGUID IS NULL
  1349. --AND t3.ContractGUID IS NULL
  1350. --AND
  1351. ISNULL(T1.TotalDj , 0) <> 0 THEN T1.BldArea
  1352. ELSE 0
  1353. END) AS RgWsArea_ydj ,
  1354. SUM(CASE WHEN -- t2.OrderGUID IS NULL
  1355. -- AND t3.ContractGUID IS NULL
  1356. --AND
  1357. ISNULL(T1.TotalDj , 0) <> 0 THEN T1.TotalDj
  1358. ELSE 0
  1359. END) AS RgWsTotalDj_ydj
  1360. INTO #ykwshs
  1361. FROM dbo.p_Room T1 WITH ( NOLOCK )
  1362. INNER JOIN dbo.p_Building bld WITH ( NOLOCK ) ON bld.BldGUID = T1.BldGUID
  1363. INNER JOIN #Proj p WITH ( NOLOCK ) ON p.projGUID = T1.ProjGUID
  1364. LEFT JOIN #Attach_room b WITH ( NOLOCK ) ON b.RoomGUID = T1.RoomGUID
  1365. LEFT JOIN #RgRoomGUID t2 WITH ( NOLOCK ) ON T1.RoomGUID = t2.RoomGUID
  1366. --LEFT JOIN #QYRoomGUID t3 WITH ( NOLOCK ) ON T1.RoomGUID = t3.RoomGUID
  1367. WHERE b.RoomGUID IS NULL
  1368. AND T1.IsZiChiStatus = 0
  1369. AND bld.YszDate IS NOT NULL
  1370. AND t2.OrderGUID IS NULL
  1371. --AND t3.ContractGUID IS NULL
  1372. GROUP BY T1.ProjGUID ,
  1373. T1.BldGUID ,
  1374. T1.BProductTypeCode;
  1375. SELECT t01.ProjGUID ,
  1376. t02.BProductTypeCode ,
  1377. t04.PayformName ,
  1378. MAX(t01.PayPercent) AS PayPercent ,
  1379. MAX(t01.Amount) AS Amount ,
  1380. CAST(t01.BeginDate AS DATE) BeginDate ,
  1381. CAST(t01.EndDate AS DATE) EndDate
  1382. INTO #tmp
  1383. FROM s_CqControlSet t01 WITH ( NOLOCK )
  1384. INNER JOIN #Proj p WITH ( NOLOCK ) ON p.projGUID = t01.ProjGUID
  1385. INNER JOIN s_CqControlSet2ProdType t02 WITH ( NOLOCK ) ON t01.CqControlSetGUID = t02.CqControlSetGUID
  1386. INNER JOIN s_CqControlSet2PayForm t03 WITH ( NOLOCK ) ON t01.CqControlSetGUID = t03.CqControlSetGUID
  1387. INNER JOIN s_PayForm t04 WITH ( NOLOCK ) ON t03.PayFormGUID = t04.PayFormGUID
  1388. GROUP BY t01.ProjGUID ,
  1389. t02.BProductTypeCode ,
  1390. t04.PayformName ,
  1391. t01.BeginDate ,
  1392. t01.EndDate;
  1393. SELECT *
  1394. INTO #temp1
  1395. FROM ( SELECT ROW_NUMBER() OVER ( PARTITION BY t0.RoomGUID , t0.TradeGUID ORDER BY IsCQ DESC , HtTotal , Status DESC ) AS num ,
  1396. CloseDate ,
  1397. st.TradeGUID ,
  1398. CASE WHEN CAST(t0.CqBBDate AS DATE) IS NOT NULL THEN CAST(t0.CqBBDate AS DATE)
  1399. ELSE CAST(t0.CqQsDate AS DATE)
  1400. END AS CqQsDate ,
  1401. CAST(QSDate AS DATE) QSDate ,
  1402. t0.RoomGUID ,
  1403. PayformName ,
  1404. IsCQ ,
  1405. HtTotal ,
  1406. Status
  1407. FROM s_Contract t0 WITH ( NOLOCK )
  1408. INNER JOIN #Proj p WITH ( NOLOCK ) ON p.projGUID = t0.ProjGUID
  1409. INNER JOIN s_Trade st WITH ( NOLOCK ) ON st.TradeGUID = t0.TradeGUID ) p
  1410. WHERE p.num = 1;
  1411. SELECT ProjGUID ,
  1412. BldGUID ,
  1413. BProductTypeCode ,
  1414. yeji_end - yeji_begin yeji_between ,
  1415. yeji_end yeji_end
  1416. INTO #tempcq
  1417. FROM ( SELECT t1.ProjGUID ,
  1418. t1.BldGUID ,
  1419. t1.BProductTypeCode ,
  1420. SUM(CASE WHEN t2.CloseDate <= @bdate
  1421. OR t2.Status IS NULL THEN 0
  1422. WHEN t2.CqQsDate <= @bdate
  1423. AND ( t2.QSDate > @bdate
  1424. OR t2.IsCQ = 1 ) THEN CASE WHEN ( t3.getamount_begin * 100 / t2.HtTotal < t4.PayPercent
  1425. OR t3.getamount_begin < t4.Amount
  1426. OR t4.PayPercent IS NULL ) THEN 0
  1427. ELSE t3.getamount_begin * pp.CheckRate / 100
  1428. END
  1429. WHEN t2.QSDate <= @bdate THEN 0
  1430. ELSE NULL
  1431. END) AS yeji_begin ,
  1432. SUM(CASE WHEN t21.CloseDate <= @edate
  1433. OR t21.Status IS NULL THEN 0
  1434. WHEN t21.CqQsDate <= @edate
  1435. AND ( t21.QSDate > @edate
  1436. OR t21.IsCQ = 1 ) THEN CASE WHEN ( t3.getamount_end * 100 / t21.HtTotal < t41.PayPercent
  1437. OR t3.getamount_end < t41.Amount
  1438. OR t41.PayPercent IS NULL ) THEN 0
  1439. ELSE t3.getamount_end * pp.CheckRate / 100
  1440. END
  1441. WHEN t21.QSDate <= @edate THEN 0
  1442. ELSE NULL
  1443. END) AS yeji_end
  1444. FROM p_Room t1 WITH ( NOLOCK )
  1445. INNER JOIN #BU pp ON pp.FQProjGUID = t1.ProjGUID
  1446. LEFT JOIN s_Trade st WITH ( NOLOCK ) ON st.RoomGUID = t1.RoomGUID
  1447. --起始日期时最新的签约
  1448. LEFT JOIN ( SELECT *
  1449. FROM #temp1 t0
  1450. WHERE CASE WHEN t0.CqQsDate <= @bdate
  1451. AND ( t0.QSDate > @bdate
  1452. OR t0.IsCQ = 1 ) THEN CqQsDate
  1453. ELSE t0.QSDate
  1454. END <= @bdate ) t2 ON t1.RoomGUID = t2.RoomGUID
  1455. AND st.TradeGUID = t2.TradeGUID
  1456. --截止日期时最新的签约
  1457. LEFT JOIN ( SELECT *
  1458. FROM #temp1 t0
  1459. WHERE CASE WHEN t0.CqQsDate <= @edate
  1460. AND ( t0.QSDate > @edate
  1461. OR t0.IsCQ = 1 ) THEN ( CqQsDate )
  1462. ELSE t0.QSDate
  1463. END <= @edate ) t21 ON t1.RoomGUID = t21.RoomGUID
  1464. AND st.TradeGUID = t21.TradeGUID
  1465. --累计回款
  1466. LEFT JOIN #getintemp t3 ON st.TradeGUID = t3.SaleGUID
  1467. --开始时间点生效的考核线
  1468. LEFT JOIN ( SELECT *
  1469. FROM #tmp t01 WITH ( NOLOCK )
  1470. WHERE t01.BeginDate <= @bdate
  1471. AND ( t01.EndDate IS NULL
  1472. OR t01.EndDate >= @bdate ) ) t4 ON t1.ProjGUID = t4.ProjGUID
  1473. AND t1.BProductTypeCode = t4.BProductTypeCode
  1474. AND t2.PayformName = t4.PayformName
  1475. --截止时间点生效的考核线
  1476. LEFT JOIN ( SELECT *
  1477. FROM #tmp t01 WITH ( NOLOCK )
  1478. WHERE t01.BeginDate <= @edate
  1479. AND ( t01.EndDate IS NULL
  1480. OR t01.EndDate >= @edate ) ) t41 ON t1.ProjGUID = t41.ProjGUID
  1481. AND t1.BProductTypeCode = t41.BProductTypeCode
  1482. AND t21.PayformName = t41.PayformName
  1483. WHERE st.TradeGUID NOT IN ( SELECT TradeGUID
  1484. FROM #c
  1485. WHERE TradeGUID IS NOT NULL
  1486. AND bxflag = 1 )
  1487. GROUP BY t1.ProjGUID ,
  1488. t1.BldGUID ,
  1489. t1.BProductTypeCode ) t;
  1490. SELECT ProjGUID ,
  1491. t.BldGUID ,
  1492. BProductTypeCode ,
  1493. SUM(CASE WHEN #BG.TradeGUID IS NULL THEN 0
  1494. ELSE yeji_end - yeji_begin
  1495. END) yeji_between ,
  1496. SUM(CASE WHEN #BG.TradeGUID IS NULL THEN 0
  1497. ELSE yeji_end
  1498. END) yeji_end
  1499. INTO #tempcq_bx
  1500. FROM ( SELECT t1.ProjGUID ,
  1501. t1.BldGUID ,
  1502. t1.BProductTypeCode ,
  1503. t1.RoomGUID ,
  1504. st.TradeGUID ,
  1505. SUM(CASE WHEN t2.CloseDate <= @bdate
  1506. OR t2.Status IS NULL THEN 0
  1507. WHEN t2.CqQsDate <= @bdate
  1508. AND ( t2.QSDate > @bdate
  1509. OR t2.IsCQ = 1 ) THEN CASE WHEN ( t3.getamount_begin * 100 / t2.HtTotal < t4.PayPercent
  1510. OR t3.getamount_begin < t4.Amount
  1511. OR t4.PayPercent IS NULL ) THEN 0
  1512. ELSE t3.getamount_begin * pp.CheckRate / 100
  1513. END
  1514. WHEN t2.QSDate <= @bdate THEN 0
  1515. ELSE NULL
  1516. END) AS yeji_begin ,
  1517. SUM(CASE WHEN t21.CloseDate <= @edate
  1518. OR t21.Status IS NULL THEN 0
  1519. WHEN t21.CqQsDate <= @edate
  1520. AND ( t21.QSDate > @edate
  1521. OR t21.IsCQ = 1 ) THEN CASE WHEN ( t3.getamount_end * 100 / t21.HtTotal < t41.PayPercent
  1522. OR t3.getamount_end < t41.Amount
  1523. OR t41.PayPercent IS NULL ) THEN 0
  1524. ELSE t3.getamount_end * pp.CheckRate / 100
  1525. END
  1526. WHEN t21.QSDate <= @edate THEN 0
  1527. ELSE NULL
  1528. END) AS yeji_end
  1529. FROM p_Room t1 WITH ( NOLOCK )
  1530. INNER JOIN #BU pp ON pp.FQProjGUID = t1.ProjGUID
  1531. LEFT JOIN s_Trade st WITH ( NOLOCK ) ON st.RoomGUID = t1.RoomGUID
  1532. --起始日期时最新的签约
  1533. LEFT JOIN ( SELECT *
  1534. FROM #temp1 t0
  1535. WHERE CASE WHEN t0.CqQsDate <= @bdate
  1536. AND ( t0.QSDate > @bdate
  1537. OR t0.IsCQ = 1 ) THEN CqQsDate
  1538. ELSE t0.QSDate
  1539. END <= @bdate ) t2 ON t1.RoomGUID = t2.RoomGUID
  1540. AND st.TradeGUID = t2.TradeGUID
  1541. --截止日期时最新的签约
  1542. LEFT JOIN ( SELECT *
  1543. FROM #temp1 t0
  1544. WHERE CASE WHEN t0.CqQsDate <= @edate
  1545. AND ( t0.QSDate > @edate
  1546. OR t0.IsCQ = 1 ) THEN ( CqQsDate )
  1547. ELSE t0.QSDate
  1548. END <= @edate ) t21 ON t1.RoomGUID = t21.RoomGUID
  1549. AND st.TradeGUID = t21.TradeGUID
  1550. --累计回款
  1551. LEFT JOIN #getintemp t3 ON st.TradeGUID = t3.SaleGUID
  1552. --开始时间点生效的考核线
  1553. LEFT JOIN ( SELECT *
  1554. FROM #tmp t01 WITH ( NOLOCK )
  1555. WHERE t01.BeginDate <= @bdate
  1556. AND ( t01.EndDate IS NULL
  1557. OR t01.EndDate >= @bdate ) ) t4 ON t1.ProjGUID = t4.ProjGUID
  1558. AND t1.BProductTypeCode = t4.BProductTypeCode
  1559. AND t2.PayformName = t4.PayformName
  1560. --截止时间点生效的考核线
  1561. LEFT JOIN ( SELECT *
  1562. FROM #tmp t01 WITH ( NOLOCK )
  1563. WHERE t01.BeginDate <= @edate
  1564. AND ( t01.EndDate IS NULL
  1565. OR t01.EndDate >= @edate ) ) t41 ON t1.ProjGUID = t41.ProjGUID
  1566. AND t1.BProductTypeCode = t41.BProductTypeCode
  1567. AND t21.PayformName = t41.PayformName
  1568. WHERE st.TradeGUID IN ( SELECT TradeGUID
  1569. FROM #c
  1570. WHERE TradeGUID IS NOT NULL
  1571. AND bxflag = 1 )
  1572. GROUP BY t1.ProjGUID ,
  1573. t1.BldGUID ,
  1574. t1.BProductTypeCode ,
  1575. t1.RoomGUID ,
  1576. st.TradeGUID ) t
  1577. LEFT JOIN #BG ON #BG.TradeGUID = t.TradeGUID
  1578. GROUP BY t.ProjGUID ,
  1579. t.BldGUID ,
  1580. t.BProductTypeCode;
  1581. -- select * from #tempcq_bx
  1582. --( SELECT a.ProjGUID ,
  1583. -- a.BldGUID ,
  1584. -- b.TradeGUID ,
  1585. -- a.BProductTypeCode
  1586. -- FROM dbo.s_Trade b WITH ( NOLOCK )
  1587. -- INNER JOIN #Proj p ON p.projGUID = b.ProjGUID
  1588. -- INNER JOIN dbo.p_Room a ON b.RoomGUID = a.RoomGUID
  1589. -- LEFT JOIN s_OCAttachRoom fs WITH ( NOLOCK ) ON fs.RoomGUID = a.RoomGUID
  1590. -- WHERE a.BProductTypeCode IS NOT NULL
  1591. -- AND fs.RoomGUID IS NULL
  1592. -- GROUP BY a.ProjGUID ,
  1593. -- a.BldGUID ,
  1594. -- b.TradeGUID ,
  1595. -- a.BProductTypeCode
  1596. -- )
  1597. /*初始化回款信息*/
  1598. SELECT *
  1599. INTO #getin
  1600. FROM ( SELECT a.ProjGUID ,
  1601. a.BldGUID ,
  1602. a.BProductTypeCode ,
  1603. ISNULL(SUM(c.AjHkTotal) , 0) AS '银行按揭' ,
  1604. ISNULL(SUM(c.GjjHkTotal) , 0) AS '公积金' ,
  1605. ISNULL(SUM(c.HkTotal) , 0) AS '现场收款' ,
  1606. ISNULL(SUM(c.ljAjHkTotal) , 0) AS 'lj银行按揭' ,
  1607. ISNULL(SUM(c.ljGjjHkTotal) , 0) AS 'lj公积金' ,
  1608. ISNULL(SUM(c.ljHkTotal) , 0) AS 'lj现场收款' ,
  1609. ISNULL(SUM(c.bckTotal) , 0) AS '补差款' ,
  1610. ISNULL(SUM(c.ljbckTotal) , 0) AS 'lj补差款'
  1611. FROM dbo.s_Trade b WITH ( NOLOCK )
  1612. INNER JOIN #Proj p WITH ( NOLOCK ) ON p.projGUID = b.ProjGUID
  1613. INNER JOIN dbo.p_Room a WITH ( NOLOCK ) ON b.RoomGUID = a.RoomGUID
  1614. LEFT JOIN #getintemp c WITH ( NOLOCK ) ON c.SaleGUID = b.TradeGUID
  1615. LEFT JOIN s_OCAttachRoom fs WITH ( NOLOCK ) ON fs.RoomGUID = a.RoomGUID
  1616. WHERE a.BProductTypeCode IS NOT NULL
  1617. AND fs.RoomGUID IS NULL
  1618. GROUP BY a.ProjGUID ,
  1619. a.BldGUID ,
  1620. a.BProductTypeCode ) moko;
  1621. /* 投模信息 */
  1622. SELECT T1.BldGUID ,
  1623. T1.BldName ,
  1624. T1.ProjGUID ,
  1625. T3.BProductTypeCode ,
  1626. T1.TMJSource ,
  1627. T1.TMAvgPrice ,
  1628. SUM(ISNULL(ISNULL(T3.BldArea , T2.BuildArea) * T1.TMAvgPrice , 0)) AS TMTotalPrice ,
  1629. SUM(ISNULL(ISNULL(T3.BldArea , T2.BuildArea) * T1.TMAvgPrice * T4.CheckRate / 100 , 0)) AS TMCheckPrice
  1630. INTO #TM
  1631. FROM p_Room T3 WITH ( NOLOCK )
  1632. INNER JOIN p_Building T1 WITH ( NOLOCK ) ON T1.BldGUID = T3.BldGUID
  1633. INNER JOIN cb_Product T2 WITH ( NOLOCK ) ON T1.ProductGUID = T2.ProductGUID
  1634. INNER JOIN p_Project T4 WITH ( NOLOCK ) ON T3.ProjGUID = T4.ProjGUID
  1635. LEFT JOIN #RgRoomGUID t2r WITH ( NOLOCK ) ON t2r.RoomGUID = T3.RoomGUID
  1636. -- LEFT JOIN #QYRoomGUID t3q ON t3q.RoomGUID = T3.RoomGUID
  1637. WHERE T1.TMJSource IS NOT NULL
  1638. AND t2r.OrderGUID IS NULL
  1639. -- AND t3q.ContractGUID IS NULL
  1640. AND ISNULL(T3.TotalDj , 0) = 0
  1641. AND T3.IsZiChiStatus = 0
  1642. GROUP BY T1.BldGUID ,
  1643. T1.BldName ,
  1644. T1.ProjGUID ,
  1645. T3.BProductTypeCode ,
  1646. T1.TMJSource ,
  1647. T1.TMAvgPrice;
  1648. /* 返回结果 */
  1649. SELECT a.BUName 公司名称 ,
  1650. a.ProjName 项目名称 ,
  1651. a.FQProjName 分期名称 ,
  1652. a.CheckRate 考核比例 ,
  1653. a.RightsRate 权益比例 ,
  1654. a.StockRate 股权比例 ,
  1655. 项目状态 ,
  1656. 项目等级 ,
  1657. 城市 ,
  1658. 项目营销负责人 ,
  1659. [区域_城市营销负责人] ,
  1660. 大区营销负责人 ,
  1661. 是否合作项目 ,
  1662. 合作方 ,
  1663. 是否营销操盘 ,
  1664. 是否我司操盘 ,
  1665. 是否并表 ,
  1666. b.BldGUID BldGUID ,
  1667. b.BldName 楼栋 ,
  1668. b.FirstLevelName AS 产品类型 ,
  1669. b.BProductTypeShortName AS 末级产品类型 ,
  1670. b.YszDate AS 取得预售许可证日期 ,
  1671. b.OpeningDate AS 开盘日期 ,
  1672. CASE WHEN j.ishzxm = 1 THEN '未启用'
  1673. ELSE '启用'
  1674. END AS 是否未启用我司销售系统 ,
  1675. --可售量
  1676. ISNULL(b.HzCount , 0) 可售套数 ,
  1677. ISNULL(b.HzArea , 0) 可售面积 ,
  1678. ISNULL(b.HzTotal , 0) 可售总价 ,
  1679. --当期净认购
  1680. ISNULL(k.RgCount , 0) 当期认购套数 ,
  1681. ISNULL(k.RgArea , 0) 当期认购面积 ,
  1682. ISNULL(CASE WHEN ISNULL(k.RgArea , 0) = 0 THEN 0
  1683. ELSE ( ISNULL(k.RgTotal , 0) ) / ( ISNULL(k.RgArea , 0) )
  1684. END , 0) 当期认购均价 ,
  1685. ISNULL(k.RgTotal , 0) 当期认购金额 ,
  1686. ISNULL(c.RgTotal , 0) + ISNULL(#bx.RgTotal , 0) 当期认购金额_含包销 ,
  1687. --当期草签
  1688. k.cqts AS 当期草签套数 ,
  1689. k.cqarea AS 当期草签面积 ,
  1690. k.cqtotal AS 当期草签金额 ,
  1691. ISNULL(g.yeji_between , 0) + ISNULL(g_bx.yeji_between , 0) AS 当期草签业绩 ,
  1692. --当期净签约
  1693. ISNULL(k.QyCount , 0) 当期净签约套数 ,
  1694. ISNULL(k.QyArea , 0) 当期净签约面积 ,
  1695. ISNULL(k.QyTotal , 0) 当期净签约金额 ,
  1696. ISNULL(c.QyTotal , 0) + ISNULL(#bx.QyTotal , 0) 当期净签约金额_含包销 ,
  1697. ---回款
  1698. --当期回款
  1699. ISNULL(d.银行按揭 , 0) * a.CheckRate / 100 AS 当期银行按揭 ,
  1700. ISNULL(d.公积金 , 0) * a.CheckRate / 100 AS 当期公积金 ,
  1701. ISNULL(d.现场收款 , 0) * a.CheckRate / 100 AS 当期现场收款 ,
  1702. ISNULL(d.补差款 , 0) * a.CheckRate / 100 AS 当期补差款 ,
  1703. ( ISNULL(d.银行按揭 , 0) + ISNULL(d.公积金 , 0) + ISNULL(d.现场收款 , 0) + ISNULL(d.补差款 , 0) ) * a.CheckRate / 100 AS 当期合计 ,
  1704. 0 合作项目当期合计 ,
  1705. --累计净认购
  1706. ISNULL(k.LjRgCount , 0) 累计认购套数 ,
  1707. ISNULL(k.LjRgArea , 0) 累计认购面积 ,
  1708. ( CASE WHEN ISNULL(k.LjRgArea , 0) = 0 THEN 0
  1709. ELSE ( ISNULL(k.LjRgTotal , 0) ) / ( ISNULL(k.LjRgArea , 0) )
  1710. END ) 累计认购均价 ,
  1711. ISNULL(k.LjRgTotal , 0) 累计认购金额 ,
  1712. ISNULL(c.LjRgTotal , 0) + ISNULL(#bx.rgtotal_lj , 0) 累计认购金额_含包销 ,
  1713. ---累计净草签
  1714. k.cqts_all AS 累计草签套数 ,
  1715. k.cqarea_all AS 累计草签面积 ,
  1716. k.cqtotal_all AS 累计草签金额 ,
  1717. --累计签约
  1718. ISNULL(k.LjQyCount , 0) 累计签约套数 ,
  1719. ISNULL(k.LjQyArea , 0) 累计签约面积 ,
  1720. ( CASE WHEN ISNULL(k.LjQyArea , 0) = 0 THEN 0
  1721. ELSE ( ISNULL(k.LjQyTotal , 0) ) / ( ISNULL(k.LjQyArea , 0) )
  1722. END ) 累计签约均价 ,
  1723. ISNULL(k.LjQyTotal , 0) 累计签约金额 ,
  1724. ISNULL(c.LjQyTotal , 0) + ISNULL(#bx.QyTotal_lj , 0) 累计签约金额_含包销 ,
  1725. --累计回款
  1726. ISNULL(d.lj银行按揭 , 0) * a.CheckRate / 100 AS 累计银行按揭 ,
  1727. ISNULL(d.lj公积金 , 0) * a.CheckRate / 100 AS 累计公积金 ,
  1728. ISNULL(d.lj现场收款 , 0) * a.CheckRate / 100 AS 累计现场收款 ,
  1729. ISNULL(d.lj补差款 , 0) * a.CheckRate / 100 AS 累计补差款 ,
  1730. ( ISNULL(d.lj银行按揭 , 0) + ISNULL(d.lj公积金 , 0) + ISNULL(d.lj现场收款 , 0) + ISNULL(d.lj补差款 , 0) ) * a.CheckRate / 100 累计合计 ,
  1731. 0 合作项目累计合计 ,
  1732. --累计认购未签约
  1733. ISNULL(k.LjRgJhCount , 0) 累计认购未签约套数 ,
  1734. ISNULL(k.LjRgJhArea , 0) 累计认购未签约面积 ,
  1735. ( CASE WHEN ISNULL(k.LjRgJhArea , 0) = 0 THEN 0
  1736. ELSE ( ISNULL(k.LjRgJhTotal , 0) ) / ( ISNULL(k.LjRgJhArea , 0) )
  1737. END ) 累计认购未签约均价 ,
  1738. ISNULL(k.LjRgJhTotal , 0) 累计认购未签约金额 ,
  1739. ISNULL(c.LjRgJhTotal , 0) + ISNULL(#bx.LjRgJhTotal , 0) 累计认购未签约金额_含包销 ,
  1740. --当时
  1741. k.cqjhtotal_all AS 当时草签金额 ,
  1742. k.cqjhts_all AS 当时草签套数 ,
  1743. k.cqjharea_all AS 当时草签面积 ,
  1744. ISNULL(g.yeji_end , 0) + ISNULL(g_bx.yeji_end , 0) AS 累计草签业绩 ,
  1745. --项目未售
  1746. ISNULL(e.RgWsCount_wdj , 0) 未售套数_未定价 ,
  1747. ISNULL(e.RgWsArea_wdj , 0) 未售面积_未定价 ,
  1748. ISNULL(e.RgWsCount_ydj , 0) 未售套数_已定价 ,
  1749. ISNULL(e.RgWsArea_ydj , 0) 未售面积_已定价 ,
  1750. ISNULL(e.RgWsTotalDj_ydj , 0) 未售金额_已定价 ,
  1751. --投模
  1752. h.TMJSource 投模价来源 ,
  1753. ISNULL(h.TMAvgPrice , 0) 投模均价 ,
  1754. ISNULL(h.TMTotalPrice , 0) 投模总金额 ,
  1755. ISNULL(h.TMCheckPrice , 0) 投模考核金额 ,
  1756. @begDate AS PZDATE_BEGIN ,
  1757. @endDate AS PZDATE_END ,
  1758. a.ProjGUID
  1759. FROM #BU a WITH ( NOLOCK )
  1760. LEFT JOIN #Hz b WITH ( NOLOCK ) ON b.FQProjGUID = a.FQProjGUID
  1761. LEFT JOIN #Trade c WITH ( NOLOCK ) ON c.BldGUID = b.BldGUID
  1762. AND b.BProductTypeCode = c.BProductTypeCode
  1763. LEFT JOIN #bx ON #bx.BProductTypeCode = b.BProductTypeCode
  1764. AND #bx.BldGUID = b.BldGUID
  1765. LEFT JOIN #getin d ON d.ProjGUID = a.FQProjGUID
  1766. AND d.BldGUID = b.BldGUID
  1767. AND b.BProductTypeCode = d.BProductTypeCode
  1768. LEFT JOIN #ykwshs e WITH ( NOLOCK ) ON b.FQProjGUID = e.FQProjGUID
  1769. AND b.BldGUID = e.BldGUID
  1770. AND b.BProductTypeCode = e.BProductTypeCode
  1771. --LEFT JOIN #cq f WITH ( NOLOCK ) ON b.BldGUID = f.BldGUID
  1772. -- AND b.BProductTypeCode = f.BProductTypeCode
  1773. LEFT JOIN #tempcq g WITH ( NOLOCK ) ON b.BldGUID = g.BldGUID
  1774. AND b.BProductTypeCode = g.BProductTypeCode
  1775. LEFT JOIN #tempcq_bx g_bx WITH ( NOLOCK ) ON b.BldGUID = g_bx.BldGUID
  1776. AND b.BProductTypeCode = g_bx.BProductTypeCode
  1777. LEFT JOIN #TM h WITH ( NOLOCK ) ON h.ProjGUID = a.FQProjGUID
  1778. AND h.BldGUID = b.BldGUID
  1779. AND h.BProductTypeCode = b.BProductTypeCode
  1780. LEFT JOIN #hzxm1 j ON j.ProjGUID = a.FQProjGUID
  1781. LEFT JOIN #Trade_fbx k ON k.BldGUID = b.BldGUID
  1782. AND b.BProductTypeCode = k.BProductTypeCode
  1783. WHERE j.ishzxm = 0
  1784. UNION ALL
  1785. SELECT a.BUName 公司名称 ,
  1786. a.ProjName 项目名称 ,
  1787. a.FQProjName 分期名称 ,
  1788. a.CheckRate 考核比例 ,
  1789. a.RightsRate 权益比例 ,
  1790. a.StockRate 股权比例 ,
  1791. 项目状态 ,
  1792. 项目等级 ,
  1793. 城市 ,
  1794. 项目营销负责人 ,
  1795. [区域_城市营销负责人] ,
  1796. 大区营销负责人 ,
  1797. 是否合作项目 ,
  1798. 合作方 ,
  1799. 是否营销操盘 ,
  1800. 是否我司操盘 ,
  1801. 是否并表 ,
  1802. NULL BldGUID ,
  1803. '' 楼栋 ,
  1804. NULL AS 产品类型 ,
  1805. NULL AS 末级产品类型 ,
  1806. NULL AS 取得预售许可证日期 ,
  1807. NULL AS 开盘日期 ,
  1808. CASE WHEN j.ishzxm = 1 THEN '未启用'
  1809. ELSE '启用'
  1810. END AS 是否未启用我司销售系统 ,
  1811. --可售量
  1812. 0 可售套数 ,
  1813. 0 可售面积 ,
  1814. 0 可售总价 ,
  1815. --当期净认购
  1816. ISNULL(I.OrderTs , 0) 当期认购套数 ,
  1817. ISNULL(I.OrderArea , 0) 当期认购面积 ,
  1818. ISNULL(I.OrderAveragePrice , 0) 当期认购均价 ,
  1819. ISNULL(I.OrderAmount , 0) 当期认购金额 ,
  1820. ISNULL(I.OrderAmount , 0) 当期认购金额_含包销 ,
  1821. --当期草签
  1822. 0 AS 当期草签套数 ,
  1823. 0 AS 当期草签面积 ,
  1824. 0 AS 当期草签金额 ,
  1825. 0 AS 当期草签业绩 ,
  1826. --当期净签约
  1827. ISNULL(I.SignTs , 0) 当期净签约套数 ,
  1828. ISNULL(I.SignArea , 0) 当期净签约面积 ,
  1829. ISNULL(I.SignAmount , 0) 当期净签约金额 ,
  1830. ISNULL(I.SignAmount , 0) 当期净签约金额_含包销 ,
  1831. ---回款
  1832. --当期回款
  1833. 0 AS 当期银行按揭 ,
  1834. 0 AS 当期公积金 ,
  1835. 0 AS 当期现场收款 ,
  1836. 0 AS 当期补差款 ,
  1837. I.RePayAmount AS 当期合计 ,
  1838. I.RePayAmount 合作项目当期合计 ,
  1839. --累计净认购
  1840. ISNULL(I.LjOrderTs , 0) 累计认购套数 ,
  1841. ISNULL(I.LjOrderArea , 0) 累计认购面积 ,
  1842. ISNULL(I.LjOrderAveragePrice , 0) 累计认购均价 ,
  1843. ISNULL(I.LjOrderAmount , 0) 累计认购金额 ,
  1844. ISNULL(I.LjOrderAmount , 0) 累计认购金额_含包销 ,
  1845. ---累计净草签
  1846. 0 AS 累计草签套数 ,
  1847. 0 AS 累计草签面积 ,
  1848. 0 AS 累计草签金额 ,
  1849. --累计签约
  1850. ISNULL(I.LjSignTs , 0) 累计签约套数 ,
  1851. ISNULL(I.LjSignArea , 0) 累计签约面积 ,
  1852. ISNULL(I.LjSignAveragePrice , 0) 累计签约均价 ,
  1853. ISNULL(I.LjSignAmount , 0) 累计签约金额 ,
  1854. ISNULL(I.LjSignAmount , 0) 累计签约金额_含包销 ,
  1855. --累计回款
  1856. 0 AS 累计银行按揭 ,
  1857. 0 AS 累计公积金 ,
  1858. 0 AS 累计现场收款 ,
  1859. 0 AS 累计补差款 ,
  1860. I.LjRePayAmount 累计合计 ,
  1861. I.LjRePayAmount 合作项目累计合计 ,
  1862. --累计认购未签约
  1863. ISNULL(I.OrderNoSignTs , 0) 累计认购未签约套数 ,
  1864. ISNULL(I.OrderNoSignArea , 0) 累计认购未签约面积 ,
  1865. ( CASE WHEN ISNULL(I.OrderNoSignArea , 0) = 0 THEN 0
  1866. ELSE I.OrderNoSignAmount / I.OrderNoSignArea
  1867. END ) 累计认购未签约均价 ,
  1868. ISNULL(I.OrderNoSignAmount , 0) 累计认购未签约金额 ,
  1869. ISNULL(I.OrderNoSignAmount , 0) 累计认购未签约金额_含包销 ,
  1870. --当时
  1871. 0 AS 当时草签金额 ,
  1872. 0 AS 当时草签套数 ,
  1873. 0 AS 当时草签面积 ,
  1874. 0 AS 累计草签业绩 ,
  1875. --项目未售
  1876. 0 未售套数_未定价 ,
  1877. 0 未售面积_未定价 ,
  1878. ISNULL(I.PushNoSaleTs , 0) 未售套数_已定价 ,
  1879. ISNULL(I.PushNoSaleArea , 0) 未售面积_已定价 ,
  1880. ISNULL(I.PushNoSaleAmount , 0) 未售金额_已定价 ,
  1881. --投模
  1882. NULL 投模价来源 ,
  1883. 0 投模均价 ,
  1884. 0 投模总金额 ,
  1885. 0 投模考核金额 ,
  1886. @begDate AS PZDATE_BEGIN ,
  1887. @endDate AS PZDATE_END ,
  1888. a.ProjGUID
  1889. FROM #BU a WITH ( NOLOCK )
  1890. LEFT JOIN #hzxm1 j ON j.ProjGUID = a.FQProjGUID
  1891. LEFT JOIN #HZXM I WITH ( NOLOCK ) ON I.BUGUID = a.BUGUID
  1892. AND I.FQProjGUID = a.FQProjGUID
  1893. WHERE j.ishzxm = 1;
  1894. --select top 100 * from #getintemp WHERE SaleGUID='A7638027-684A-EB11-B392-005056834EAD'
  1895. --SELECT * from #tempcq_bx
  1896. --SELECT SUM(getamount_end),SUM(getamount_begin) FROM #getintemp
  1897. DROP TABLE #BU, #Hz, #Trade, #ykwshs, #Attach_room, #tempcq, #getin, #hzxm1, #HZXM;
  1898. END;