我有以下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 |
但我现在真的很丢失。
任何帮助表示赞赏!感谢
答案 0 :(得分:5)
这是典型的交叉表查询:
TRANSFORM Sum(XTabTable.Quantity) AS SumOfQuantity
SELECT XTabTable.Company
FROM XTabTable
GROUP BY XTabTable.Company
PIVOT XTabTable.Item;
可以使用Access查询向导或查询设计窗口构建它。
答案 1 :(得分:2)
您可以构建自己的数据透视/交叉制表符的另一种方法。它完全符合ANSI标准。因此对于我使用SQL Server
的示例,因为它更加内联MS ACCESS SQL。请忽略小提琴中的其他表......
查询:
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
。因此,我们将 shortcircuit 与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指出的那样。
答案 2 :(得分: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