相关文章推荐
捣蛋的手术刀  ·  primeng table column ...·  7 月前    · 
严肃的牙膏  ·  jquery fadein display ...·  8 月前    · 
光明磊落的登山鞋  ·  Directory.GetFiles ...·  1 年前    · 
求醉的大白菜  ·  SQLServer 分页Offset ...·  1 年前    · 

1、准备数据

create table t_demo(id int,name varchar(20),nums int);  ---- 创建表  
insert into t_demo values(1, '苹果', 1000);  
insert into t_demo values(2, '苹果', 2000);  
insert into t_demo values(3, '苹果', 4000);  
insert into t_demo values(4, '橘子', 5000);  
insert into t_demo values(5, '橘子', 3000);  
insert into t_demo values(6, '葡萄', 3500);  
insert into t_demo values(7, '芒果', 4200);  
insert into t_demo values(8, '芒果', 5500); 

2、Pivot行转多列

select * 
from (select name, nums from t_demo) 
pivot (sum(nums) total,min(nums) min for name in ('苹果' apple, '橘子' orange, '葡萄' grape, '芒果' mango));

Unpivot

1、准备数据

CREATE TABLE t_demo_unpivot as
select * 
from (select name, nums from t_demo) 
pivot (sum(nums) total,min(nums) min for name in ('苹果' apple, '橘子' orange, '葡萄' grape, '芒果' mango));

2.列转行

select * from t_demo_unpivot unpivot(nums for name in (APPLE_TOTAL,APPLE_MIN,ORANGE_TOTAL,ORANGE_MIN,GRAPE_TOTAL,GRAPE_MIN,MANGO_TOTAL,MANGO_MIN))

3.转多列并包含多个名称

select * 
from t_demo_unpivot 
unpivot((total,min) for name in ((APPLE_TOTAL,APPLE_MIN) AS '苹果',
                                 (ORANGE_TOTAL,ORANGE_MIN) AS '橘子',
                                 (GRAPE_TOTAL,GRAPE_MIN) AS '葡萄',
                                 (MANGO_TOTAL,MANGO_MIN) AS '芒果'
  有时候可能会有这样的需求: 将一张表的所有做为数据的一数据,将一数据作为整张表的名
当比较多时,只用PIVOT是解决不了的,经过研究,需要将UNPIVOTPIVOT 联合使用
  如上面的3个图,我们最终需要把形式1换为形式3. 然而单用PIvot 解决不了问题,需要分两步换
第一步:先通过UNPIVOT将所有换到数据中的一...
                                    CREATE TABLE  T5 (idnum NUMBER,f1 NUMBER(10,5),f2 NUMBER(10,5),f3 NUMBER(10,5),e1 NUMBER(10,5),e2 NUMBER(10,5),h1 NUMBER(10,5),h2 NUMBER(10,5));
INSERT INTO T5 (IDNUM,F1,F2,F3,E1,E2,H1,H2) VALUES (1,
                                    SQL 当中的 PIVOT 关键字 , 是通过将 表达式 某一中的唯一值换为输出中的多个来旋表值表达式 , 并在必要时对最终输出的任何其余值执行聚合 . (即  结果 行  )
                                    今天有个同学要做行的问题,把实现过程记录一下
首先把同学要实现的原表晒出来,大家看下
这是同学要实现的效果,主要是一行多行的效果,且换前不知道有多少唯一行值该
下面直接贴代码,仅供大家参考,如果有疑问请联系我qq,2625526306,有偿代写sql,原创,载需备注,谢谢
if object_id('tempdb..#test')  is not null
drop table #...
        TMP_1 AS (SELECT CITY FROM BBBBBBBBBBBBBB B),
        TMP_2 AS (SELECT BSFWR FROM TMP_1 A INNER JOIN AREAS B ON A.CITY = B.AREA_NAME)
    SELECT BSFWR
      FROM TMP_2
                                    pivot函数格式:pivot(聚合函数 for 需要的字段名 in(需要的字段值));
pivot函数说明:实现将指定字段的值换为的效果。