1

我有以下 Access 2007 表:

Company | Item | Quantity
-------------------------
AA      | Ia   | 2
BB      | Ib   | 3
CC      | Ia   | 4
AA      | Ib   | 5 

我想创建一个具有以下结果的查询

Company | Ia  | Ib
------------------ 
AA      | 2   | 5
BB      |     | 3
CC      | 4   |

但我现在真的有点迷路了。

任何帮助表示赞赏!谢谢

4

3 回答 3

5

这是一个典型的交叉表查询:

TRANSFORM Sum(XTabTable.Quantity) AS SumOfQuantity
SELECT XTabTable.Company
FROM XTabTable
GROUP BY XTabTable.Company
PIVOT XTabTable.Item;

它可以使用 Access 查询向导或查询设计窗口构建。

xtab 查询

于 2013-01-08T16:30:48.000 回答
2

您可以构建自己的数据透视表/交叉表的另一种方法。它完全符合 ANSI 标准。因此,对于我使用的示例SQL Server,它与 MS ACCESS SQL 更加内联。请忽略小提琴中的其他表...

* SQLFIDDLE 演示

询问:

Select
 company,
 'Ia'=Sum(Case When item = 'Ia' Then Quantity Else 0 End),
 'Ib'=Sum(Case When item = 'Ib' Then Quantity Else 0 End)
 From mytable
 Group By company
 ;

编辑: MS Access 不支持CASE. 所以我们将它短路IIF

 Select
 company,
 Sum(IIF(item = 'Ia', Quantity, 0)) AS Ia,
 Sum(IIF(item = 'Ia', Quantity, 0)) AS Ib
 From mytable
 Group By company
 ;

结果:

    COMPANY     IA  IB
    AA          2   5
    BB          0   3
    CC          4   0

当然,这仅在您拥有少量items. 由于您使用的是 MS Acess,您不妨使用它的内置功能 :) 就像 @Remou 指出的那样。

于 2013-01-08T16:41:17.863 回答
0

如果您决定将数据存储在 SQL Server 数据库中,您可以使用以下方法:

Declare @columns Nvarchar(Max), @SQL Nvarchar(Max)

With    DistinctCols As
(
        Select  Distinct Item
        From    AccessTable
)
Select  @columns = Coalesce(@columns + ',','') + '[' + Item + ']'
From    DistinctCols
Order   By Item

Select  @SQL = 'Select  Company, ' + @columns + '
                From    AccessTable at
                Pivot   (Sum(Quantity) For Item In (' + @columns + ')) p'

Exec    sp_executeSQL @SQL
于 2013-01-08T17:05:25.620 回答