将列附加到查询结果

时间:2013-01-08 16:20:14

标签: sql ms-access

我有以下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   |

但我现在真的很丢失。

任何帮助表示赞赏!感谢

3 个答案:

答案 0 :(得分:5)

这是典型的交叉表查询:

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

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

xtab query

答案 1 :(得分:2)

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

* SQLFIDDLE DEMO

查询:

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