【问题标题】:How to convert fields into rows through SQL in MS Access 2007 or MS SQL Server 2005如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行
【发布时间】:2008-12-02 16:24:02
【问题描述】:

我有一个旧版 MS Access 2007 表,其中包含 52 个字段(一年中的每周 1 个字段)代表历史销售数据(实际上加上一个字段)。我想将此数据库转换为更传统的时间/值列表。

有没有人知道如何在不编写带有 52 多个显式参数的查询的情况下做到这一点?

(如果MS SQL Server 2005下有解决方案,我也可以导出/导入表)

【问题讨论】:

    标签: sql sql-server ms-access pivot


    【解决方案1】:

    Using PIVOT and UNPIVOT.

    UNPIVOT 执行几乎相反的操作 PIVOT 的操作,通过旋转 列成行。假设表 在前面的例子中产生的是 在数据库中存储为pvt,而你 想要旋转列标识符 Emp1Emp2Emp3Emp4Emp5 进入 对应于 a 的行值 特定的供应商。这意味着你 必须标识另外两个列。 将包含的列 您正在旋转的列值 (Emp1, Emp2,...) 将被调用 Employee,以及将 保存当前驻留的值 在被旋转的列下将 称为订单。这些列 对应于 pivot_columnvalue_column,分别在 Transact-SQL 定义。这里是 查询。

    --Create the table and insert values as portrayed in the previous example.
    CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
    Emp3 int, Emp4 int, Emp5 int)
    GO
    INSERT INTO pvt VALUES (1,4,3,5,4,4)
    INSERT INTO pvt VALUES (2,4,1,5,5,5)
    INSERT INTO pvt VALUES (3,4,3,5,4,4)
    INSERT INTO pvt VALUES (4,4,2,5,5,4)
    INSERT INTO pvt VALUES (5,5,1,5,5,5)
    GO
    --Unpivot the table.
    SELECT VendorID, Employee, Orders
    FROM 
       (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
       FROM pvt) p
    UNPIVOT
       (Orders FOR Employee IN 
          (Emp1, Emp2, Emp3, Emp4, Emp5)
    )AS unpvt
    GO
    

    这是部分结果集。

    VendorID   Employee   Orders
    1      Emp1         4
    1      Emp2         3
    1      Emp3         5
    1      Emp4         4
    1      Emp5         4
    2      Emp1         4
    2      Emp2         1
    2      Emp3         5
    2      Emp4         5
    2      Emp5         5
    ...
    

    【讨论】:

    • 感谢您的回答。今天学习如何使用 PIVOT 为我节省了大量时间!!
    【解决方案2】:

    如上所述,UNPIVOT 运算符,如果可用,将执行此操作...如果此不可用,则 std SQL 方法是:

    联合多个选择语句(每周一个),使用相同的列名称别名来别名特定周的列

      Select 1 as week, Week1Val as value from Table
        UNION
      Select 2 as week, Week2Val as value from Table
        UNION
      Select 3 as week, Week3Val as value from Table
        UNION
     ... 
        UNION
      Select 52 as week, Week52Val as value from Table
    

    【讨论】:

      【解决方案3】:

      无需导出到 SQL Server。在 Access 中,尝试 /View/PivotTable View 子菜单。 (无论如何,它在我的 Access 2003 中。)我更喜欢它而不是 Excel 中的那个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-25
        • 1970-01-01
        • 2010-10-22
        • 1970-01-01
        • 1970-01-01
        • 2020-11-23
        相关资源
        最近更新 更多