【问题标题】:C# How do I Order By my Transform/Pivot in Ms Access?C# 如何在 Ms Access 中按我的转换/透视排序?
【发布时间】:2017-10-16 12:20:27
【问题描述】:

使用此代码:

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

我能够为我的目的创建一个小型报告摘要,它是从一个更大的数据库生成的,只有重要的东西。

它是这样的:

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

" 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 ");

当我在我的主数据库上运行它时,它会按照模式建议正确地在顶部和其余部分按收入进行排序,但是将其插入到我的转换/透视查询中,我遇到“Group by 子句与 Order by 冲突条款”错误。如果不允许此操作,我如何订购我的数据透视数据?

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

我要做的就是让我的枢轴的最后几行遵循正确的模式。

【问题讨论】:

    标签: sql ms-access group-by pivot


    【解决方案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 限制,但这仍可能需要很长时间,具体取决于您的数据量。此外,在对数字数据执行连接时,连接应该更有效。

    【讨论】:

    • 好的,这对于新手来说有很多信息。在其他数据库上工作后,我认为会有所不同,2GB 的限制是一个惊喜。相当小。我想你的意思是我可以通过将表拆分为不同的文件来解决这个问题?我主要来自 C# 背景,没有使用访问的 SQL 方面,而是通过 SQL 命令等与其交互。因此,我想知道您是否可以澄清您的意思:查找表。不过,我对 Excel 变体很熟悉; PK的Desc文本,什么意思?
    • 那么,您的意思是通过选择创建该工作订单,并将其按原样加入主表(视图)并从我原来的数据透视表中删除该列的实际选择?我想这可以工作。 2GB 的限制是惊人的,有没有办法超越链接表?这些可以达到多达 270000 + 行数据。 (虽然在 excel 中,这只有区区 10 mb,但不利于扩展)
    • PK = 主键。听起来您需要学习有关关系数据库概念的入门知识。谷歌“查找表”。
    • 啊,对,我知道这些,但它们在我的语言中的称呼不同。
    猜你喜欢
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2017-02-14
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多