SQLServer trip data into data columns

Ready to work

Create a table

 1 use [test1]
 2 go
 3 
 4 create table [dbo].[student](
 5     [id] [int] identity(1,1) not null,
 6     [name] [nvarchar](50) null,
 7     [project] [nvarchar](50) null,
 8     [score] [int] null,
 9  constraint [pk_student] primary key clustered 
10 (
11     [id] asc
12 )with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
13 ) on [primary]
14 go

Insert data

. 1  INSERT  INTO test1.dbo.student (name, Project, Score)
 2  values ( ' John Doe ' , ' Android ' , ' 60 ' ),
 . 3        ( ' John Doe ' , ' iOS ' , ' 70 ' ),
 . 4        ( ' John Doe ' , ' HTML5 ' , ' 55 ' ),
 . 5        ( ' John Doe ' ,'.NET ' , ' 100 ' ),
 . 6        ( ' John Doe ' , ' Android ' , ' 60 ' ),
 . 7        ( ' John Doe ' , ' iOS ' , ' 75 ' ),
 . 8        ( ' John Doe ' , ' HTML5 ' , ' 90 ' ),
 9        ( ' John Doe ' ,'.net','100');

Use Case When line train and polymerized functions

grammar

1 select column_name,
2 <aggregation function>(<case when expression>)  
3 from database.schema.table
4 group by column_name

Parsing

column_name

Data Column names

aggregation function

Aggregate functions, common are: sum, max, min, avg, count the like.

case when expression

case when expression

Examples

1 select name,
2 max(case project when 'android' then score end) as '安卓',
3 max(case project when 'ios' then score end) as '苹果',
4 max(case project when 'html5' then score end) as 'html5',
5 max(case project when '.net' then score end) as '.net'
6 from [test1].[dbo].[student]
7 group by name

Sample results

Conversion ago

After conversion

PIVOT carried out using special train line

PIVOTBy the expression a unique value in the output into a plurality of columns rotating table value expression. And PIVOTrun the polymerization in the final output on any remaining column values need PIVOTto provide more than a series of complex SELECT...CASEsyntax simpler and more readable syntax statement specified, PIVOTperform aggregation and possible multiple rows into a single row in the output .

 grammar

 1 select <non-pivoted column>,  
 2     [first pivoted column] as <column name>,  
 3     [second pivoted column] as <column name>,  
 4     ...  
 5     [last pivoted column] as <column name>  
 6 from  
 7     (<select query that produces the data>)   
 8     as <alias for the source query>  
 9 pivot  
10 (  
11     <aggregation function>(<column being aggregated>)  
12 for   
13 [<column that contains the values that will become column headers>]   
14     in ( [first pivoted column], [second pivoted column],  
15     ... [last pivoted column])  
16 ) as <alias for the pivot table>  
17 <optional order by clause>;  

语法解析

<non-pivoted column>

非聚合列。

[first pivoted column]

第一列列名。

[second pivoted column]

第二列列名。

[last pivoted column]

最后一列列名。

<select query that produces the data>

数据子表。

<alias for the source query>  

表别名。

<aggregation function>

聚合函数。

<column being aggregated>

聚合函数列,用于输出值列,最终输出中返回的列(称为分组列)将对其进行分组。

[<column that contains the values that will become column headers>] 

转换列,此列返回的唯一值将成为最终结果集中的字段。

[first pivoted column], [second pivoted column],  ... [last pivoted column]

数据行中每一行行要转换的列名。

<optional order by clause>

排序规则。

示例

 1 select b.Name,b.[android],b.[ios],b.[html5],b.[.net] 
 2 from  
 3 (select Name,Project,Score from [test1].[dbo].[student])
 4 as a
 5 pivot
 6 (
 7     max(Score)
 8     for Project in ([android],[ios],[html5],[.net])
 9 ) 
10 as b
11 order by b.name desc

示例结果

转换前

转换后

注意事项

1、如果输出列名不能在表转换列中,则不会执行任何计算。

2、输出的所有列的列名的数据类型必须一致。

 

Guess you like

Origin www.cnblogs.com/vuenote/p/11258616.html