SQL实现数据透视效果

编程入门 行业动态 更新时间:2024-10-14 14:17:30

SQL实现数据<a href=https://www.elefans.com/category/jswz/34/1763042.html style=透视效果"/>

SQL实现数据透视效果

一、透视

在SQL中实现类似Excel中数据透视表的效果,需要使用到PiVOT函数

SELECT <non-pivoted column>,[first pivoted column] AS <column name>,[second pivoted column] AS <column name>,...
FROM(<SELECT query that produces the data>)AS <alias for the source query>
PIVOT
(<aggregation function>(<column being aggregated>)FOR[<column that contains the values that will become column headers>]IN ( [first pivoted column], [second pivoted column],... [last pivoted column])
) AS <alias for the pivot table>

其中, 是不需要进行透视的列,[first pivoted column]、[second pivoted column] 等是需要进行透视的列, 是透视后新表格的列名, 是聚合函数,用于将多行数据聚合成一行数据, 是需要进行聚合的列,[] 是包含新列名的列名,IN 后面的括号中是新表格的列名。
实例数据

用透视函数,把日期打标的枚举值放在列上

select * from (SELECT  
CASE WHEN DATEDIFF(DAY,日期,GETDATE())=1 THEN 'T-1' WHEN DATEDIFF(DAY,发货日期,GETDATE())=2 THEN 'T-2' WHEN DATEDIFF(DAY,发货日期,GETDATE())=3 THEN 'T-3'  END AS 日期打标
,[客户名称]
,[订单量]FROM [XX表]
) a PIVOT(sum(订单量) for [日期打标] in([T-1],[T-2],[T-3])) as p 

2、动态列名

如果是我们希望动态的设置列名,列名取自某一列的枚举值(去重),可以拼接一个动态查询语句

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);---拼接查询语句-----
SELECT @cols = STUFF((SELECT DISTINCT ', [' + 日期 + ']'FROM [XX表]ORDER BY 1 --ORDER BY 1 表示按照查询结果中的第一列进行排序---FOR XML PATH('')--拼接查询结果), 1, 2, ''-------将拼接结果最前面的第一个‘,’替换为''(删除最前面的逗号和空格)
);
select @cols----定义一个查询,把列名套进去
SET @query = '
SELECT *
FROM (SELECT DATEPART(year, date_column) AS sales_year, DATEPART(month, date_column) AS sales_month, sales_amountFROM Sales
) AS sales_data
---使用透视函数----
PIVOT (SUM(sales_amount)FOR sales_month IN (' + @cols + ')
) AS pivot_table
ORDER BY sales_year;
';EXECUTE(@query);

上面拼接过程用到两个函数

  1. STUFF函数:
    该函数的作用是替换指定字符串的一部分。其语法为:
SELECT STUFF( string_expression, start, length, replacement_string )

其中,string_expression是要替换的字符串,start是替换的起始位置,length是要替换的长度,replacement_string是替换后的新字符串。
以下是一个简单的示例:
假设有一个字符串 “Hello, World!”,我们想要将其中的 “World” 替换成 “Universe”,可以使用 STUFF 函数来实现:

SELECT STUFF('Hello, World!', 8, 5, 'Universe')

该语句的执行结果为 “Hello, Universe!”,其中,8 表示要替换的起始位置,5 表示要替换的长度,‘Universe’ 是替换后的新字符串。

  1. FOR XML PATH(’ ')函数:
    该函数的作用是将查询结果转化为XML格式,并将每一行的结果用拼接成一个字符串。其语法为:
SELECT column_name
FROM table_name
FOR XML PATH('')

其中,column_name是要拼接的列名,table_name是要查询的表名,PATH(‘’)表示不指定XML路径,直接将结果拼接成一个字符串。

这两个函数在SQL查询中非常有用,常用于将查询结果按照一定的格式进行拼接和替换。在上面的例子中,STUFF函数和FOR XML PATH(‘’)函数一起使用,将查询结果中的日期列取出来,按照一定的格式拼接成一个字符串,并赋值给变量@cols。

3、逆透视

UNPIVOT逆透视的作用和透视相反,用法相似,这里就不多赘述了。

更多推荐

SQL实现数据透视效果

本文发布于:2023-12-04 02:00:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1659433.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:透视   效果   数据   SQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!