当列类型为 nvarchar 时,将表与列值的总和一起旋转

Pivoting a table along with sum of column value when column type is nvarchar(当列类型为 nvarchar 时,将表与列值的总和一起旋转)
本文介绍了当列类型为 nvarchar 时,将表与列值的总和一起旋转的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有以下结构的表.我想转置它.

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.

输出

 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

我试过了

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

但由于这些是 nvarchar 值,sum 是无效的.我收到此错误

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;

推荐答案

条件聚合可能会用到

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 演示

这篇关于当列类型为 nvarchar 时,将表与列值的总和一起旋转的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)