Pivoting a table along with sum of column value when column type is nvarchar

落爺英雄遲暮 提交于 2020-01-30 06:01:25

问题


I have a table with following structure. I want to Transpose it.

 BookId    Status   
 ----------------------
 123A      Perfect
 123B      Restore
 123C      Lost
 123D      Perfect
 123A      Perfect
 123B      Restore
 123A      Lost
 123B      Restore

I need the transpose table to look something like this.

Output

 BookId    Total  Perfect   Restore  Lost
 -----------------------------------------
  123A      3       2         0        1
  123B      3       0         3        0
  123C      1       0         0        1
  123D      1       1         0        0

I have tried this

select
    BookId,
    sum('Perfect') as Perfect,
    sum('Restore') as Restore
from 
    [dbo].[Orders]
group by 
    BookId

But as those are nvarchar values, sum is invalid. I am getting this error

I have not much hands on pivot. But tried following

select *
from 
    (select SellerAddress, ApplicationStatus
     from [Farm_For_Books].[dbo].[Orders]) src
pivot
    (sum(ApplicationStatus)
         for SellerAddress in ([1], [2], [3])
    ) piv;

回答1:


conditional aggregation might be used

with Orders( BookId, Status ) as
(
 select '123A','Perfect' union all
 select '123B','Restore' union all
 select '123C','Lost'    union all
 select '123D','Perfect' union all
 select '123A','Perfect' union all
 select '123B','Restore' union all
 select '123A','Lost'    union all
 select '123B','Restore'   
)    
select
    BookId,
    sum(1) as [Total],
    sum(case when Status='Perfect' then 1 else 0 end ) as [Perfect],
    sum(case when Status='Restore' then 1 else 0 end ) as [Restore],
    sum(case when Status='Lost' then 1 else 0 end ) as [Lost]    
from 
    [Orders]
group by BookId;

BookId  Total   Perfect Restore Lost
123A      3        2       0     1
123B      3        0       3     0
123C      1        0       0     1
123D      1        1       0     0

Rextester Demo



来源:https://stackoverflow.com/questions/53967861/pivoting-a-table-along-with-sum-of-column-value-when-column-type-is-nvarchar

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!