C#如何通过Access中的Transform / Pivot进行排序?

时间:2017-05-17 07:16:31

标签: sql ms-access group-by pivot

使用此代码:

TRANSFORM SUM(Amount) SELECT DISTINCT IS_Accounts FROM [TABLE] GROUP BY IS_Accounts PIVOT Status

我能够为我的目的创建一个迷你报告摘要,它是从一个只有重要内容的更大的数据库生成的。

这是它的样子: Image

但是,“帐户”列全部无序,其中一些优先级高于其他列。为此,我编写了一个查询并在主数据库上对其进行了测试。

" ORDER BY IIf([IS_Accounts] = 'Revenues' , 1 , IIf([IS_Accounts] = 'Cost of Services', 2 , IIf([IS_Accounts] = 'Operating Expenses', 3, IIf([IS_Accounts] = 'Other income/expense', 4, IIf([IS_Accounts] = 'Income Taxes', 5, 6))))) ASC ");

当我在我的主数据库上运行它时,它正确地按收益排在顶部,其余按模式建议排序,但是将其插入到我的Transform / Pivot查询中,我遇到了一个" Group by子句冲突with order by clause"错误。如果不允许此操作,我该如何订购透视数据?

请注意,我使用IIF而不是大小写,这是因为MS Access与其他数据库不同时无法使用。

我打算做的就是让我的枢轴的最后一行遵循正确的模式。

1 个答案:

答案 0 :(得分:1)

使用表达式

在查询中构造一个名为[Sort](或任何你想要的)的字段

Switch([IS_Accounts] = 'Revenues', 1, [IS_Accounts] = 'Cost of Services', 2, [IS_Accounts] = 'Operating Expenses', 3, [IS_Accounts] = 'Other income/expense', 4, [IS_Accounts] = 'Income Taxes', 5, True, 6)

现在将该字段指定为CROSSTAB中的另一个RowHeading。

我认为您已经拥有这些预算项目的查找表,这些预算项目用作输入数据记录的来源。该序列号可以是该查找表中的另一个字段。将表格加入CROSSTAB以输入序列号。您是否将实际描述性文本保存到数据记录中而不是查找表中的PK?重复此文本将更快地使用Access 2GB限制,但这可能仍需要很长时间,具体取决于您的数据量。此外,当对数字数据进行连接时,连接应该更有效。