首页 > 解决方案 > MS-Access SQL Pivot 多列

问题描述

我有一个如下所示的数据表:

流ID 期间ID 最小 最大限度
STR_01 1 0 9
STR_01 2 0 7
STR_01 3 4 9
STR_02 1 2 5
STR_02 2 1 8
STR_02 3 0 6

我想构建一个如下所示的数据透视表:

流ID MIN1 MIN2 MIN3 MAX1 MAX2 MAX3
STR_01 0 0 4 9 7 9
STR_02 2 1 0 5 8 6

如何使用 SQL 语言做到这一点?是否可以直接使用多个字段值进行数据透视,或者我是否需要取消透视原始表并与数据透视表创建连接?是否可以加入数据透视表?我试图像这样取消透视数据:

流ID 期间ID 范围 价值
STR_01 1 最小 0
STR_01 1 最大限度 9
STR_01 2 最小 0
STR_01 2 最大限度 7
STR_01 3 最小 4
STR_01 3 最大限度 9

标签: sqlms-accesspivot

解决方案


如果类是固定的,并且周期数也是固定的,则以下查询会产生您想要的结果:

TRANSFORM First(MinMax)
SELECT StreamID
FROM
(  SELECT StreamID, "MIN" & PeriodID AS Piv, MIN AS MinMax
   FROM Tabla1
 UNION ALL 
   SELECT StreamID, "MAX" & PeriodID AS Piv, MAX AS MinMax
   FROM Tabla1
)
GROUP BY StreamID 
PIVOT Piv 
IN ("MIN1", "MIN2", "MIN3", "MAX1", "MAX2", "MAX3") ;

如果句点数是动态的而不是固定的,您只需要删除“IN”子句,它仍然可以工作,尽管列的顺序将由列名的字母数字顺序决定。在这种特定情况下,“MAX”列将出现在“MIN”列之前。

您可能还想查看可从LightningGuide.net下载的数据库中的五个示例查询“F_Transform_...” 。

我上面提供的查询代码可以推广到具有更多类(MIN,MAX,MID,...)的情况,只要提前知道类,只需增加 UNION 和 SELECT 子句的数量即可。


推荐阅读