sqlserver 行转列,求和

      今天需要这么一条sql语句,需求是B2B_Agent(供应商表)、forderform_tmpUse(订单状态临时表),找出每个供应商出票状态是(2, 7, 8, 15, 16)  这几种状态的出票总数。forderform_tmpUse中的每一条记录代表一个订单

      首先用到的是行转列,将这两个表进行关联之后,对ftu.status 的每个状态求和。然后就把刚刚的这个查询当做一个新表,在按照供应商简称分组排序。

注:就是不明白为什么要除以一个数,没搞懂

SELECT CompanyNameShort,
sum(二) as 二,sum(九) as 九,sum(十五) as 十五,sum(新的) as 新的
FROM
(SELECT ba.CompanyNameShort,
sum(CASE ftu.status WHEN 2 THEN 1 ELSE 0 END ) AS 二,
sum(CASE ftu.status WHEN 7 THEN 1 ELSE 0 END ) AS 七,
sum(CASE ftu.status WHEN 8 THEN 1 ELSE 0 END ) AS 九,
sum(CASE ftu.status WHEN 15 THEN 1 ELSE 0 END ) AS 十五,
sum(CASE ftu.status WHEN 16 THEN 1 ELSE 0 END ) AS 十六,
(sum(CASE ftu.status WHEN 7 THEN 1 ELSE 0 END )  + sum(CASE ftu.status WHEN 16 THEN 1 ELSE 0 END ) )as 新的
FROM   B2B_Agent ba WITH(NOLOCK)
LEFT JOIN   forderform_tmpUse ftu WITH(NOLOCK)  ON   ba.Code = ftu.category
WHERE ba.isprovider = 1  AND  ba.Isuseful = 1  AND  ba.[State] = 1  AND  ba.Code<>''  AND  ba.Code IS NOT NULL
AND  ba.FatherAgentId IS NULL  AND  ftu.[status] IN (2, 7, 8, 15, 16)  
GROUP BY ba.CompanyNameShort,ftu.status  ) a
GROUP BY CompanyNameShort ORDER BY a.CompanyNameShort

原文地址:https://www.cnblogs.com/bangejingting/p/2542132.html