我有以下SQL语句来创建摘要视图
TRANSFORM Sum(Amount) AS CurrAmount
SELECT Currency, Sum(Amount) AS TotalAmount
From MyTable
GROUP BY Currency
ORDER BY Currency
PIVOT Source
它会创建以下视图
Currency TotalAmount Retail Corporate Others
EUR 7,071 585 2,345 4,141
GBP 10,444 2,322 4,889 3,233
JPY 7,050 1,295 4,500 1,255
USD 1,625 250 450 925
我正在寻求帮助,其中我需要' TotalAmount'字段显示为最后一列。非常感谢
NIZ
答案 0 :(得分:1)
我认为您对列排序/序列的要求可以由IN
运算符支持的TRANSFORM
子句处理。看看这个:
TRANSFORM <aggregate-function-expression>
<select-statement>
PIVOT <expression>
[IN (<column-value-list>)]
其中<aggregate-function-expression>
是使用其中一个聚合函数创建的表达式,<select-statement>
包含GROUP BY
子句,<column-value-list>
是预期返回的必需值列表通过PIVOT
表达式,用引号括起来并用逗号分隔。 (您可以使用IN
子句强制列的输出序列。)
换句话说,只需使用IN
并按所需顺序放置以引号/逗号分隔的列列表(例如IN ("Currency", "Retail", "Corporate", "Others", "TotalAmount")
)
对我来说似乎有点复杂,但它似乎得到了Access的支持。
注意:此信息来自以下文章: TRANSFORM Statement
答案 1 :(得分:0)
使用IN子句的解决方案在某种程度上可以完成工作但有时表现得很奇怪。而且,部门(零售,公司)对我来说并不固定。新部门不断涌现,因此每次都不能对其进行硬编码。我以更简单的方式解决了这个问题。
SELECT Currency,
(SELECT SUM(t1.Amount) FROM MyTable t1 WHERE t1.Source = 'Retail' AND t1.Curr = pos.Curr) Retail,
(SELECT SUM(t1.Amount) FROM MyTable t1 WHERE t1.Source = 'Corporate' AND t1.Curr = pos.Curr) Corporate,
(SELECT SUM(t1.Amount) FROM MyTable t1 WHERE t1.Source NOT IN ('Retail','Corporate') AND t1.Curr = pos.Curr) Others,
(SELECT SUM(t1.Amount) FROM MyTable t1 WHERE t1.Curr = pos.Curr) Total
FROM MyTable pos
GROUP BY Curr
ORDER BY Curr
即使在上面,如果有新的部门(出现在Others中),如果我需要指定,我将最终更改SQL,但仍然在我的控制之下,而不像TRANSFORM语句失控。 / p>
谢谢你们。