[英]MS-Access SQL Pivot multiple columns
我有一个看起来像这样的数据表:
流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 | 最大1 | 最大2 | 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 |
l如果类是固定的,周期数是动态的,下面的查询会产生你想要的结果:
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 等)的情况,只要这些类是事先知道的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.