Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将列追加到查询结果_Sql_Ms Access - Fatal编程技术网

Sql 将列追加到查询结果

Sql 将列追加到查询结果,sql,ms-access,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 |

我拥有以下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   |
但我现在真的有点迷路了


感谢您的帮助!谢谢这是一个典型的交叉表查询:

TRANSFORM Sum(XTabTable.Quantity) AS SumOfQuantity
SELECT XTabTable.Company
FROM XTabTable
GROUP BY XTabTable.Company
PIVOT XTabTable.Item;
可以使用Access查询向导或“查询设计”窗口来构建它


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

TRANSFORM Sum(XTabTable.Quantity) AS SumOfQuantity
SELECT XTabTable.Company
FROM XTabTable
GROUP BY XTabTable.Company
PIVOT XTabTable.Item;
可以使用Access查询向导或“查询设计”窗口来构建它


另一种方法,您可以构建自己的轴/交叉表。它完全符合ANSI标准。因此,对于示例,我使用了
SQLServer
,因为它更内联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不支持
案例
。因此,我们将使用
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

或者,这仅在您有少量
项时方便。由于您使用的是MS Acess,您不妨使用其内置功能:)就像@Remou指出的那样。

另一种方法,您可以构建自己的透视/交叉选项卡。它完全符合ANSI标准。因此,对于示例,我使用了
SQLServer
,因为它更内联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不支持
案例
。因此,我们将使用
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

或者,这仅在您有少量
项时方便。由于您使用的是MS Acess,您不妨使用其内置功能:)就像@Remou指出的那样。

如果您决定将数据存储在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

如果您决定将数据存储在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


您是否有一组固定的可能项目,还是必须是动态的?例如,输出中是否总是有两列的
Ia
Ib
?@njk这是一个MS Access问题,SQL是一个通用标记。MS Access是一个RAD工具,因此对SQL的了解是MS Access使用之外的附加知识,而不是中心知识。您有一组固定的可能项目,还是必须是动态的?例如,输出中是否总是有两列的
Ia
Ib
?@njk这是一个MS Access问题,SQL是一个通用标记。MS Access是一个RAD工具,因此对SQL的了解是MS Access使用的附加知识,而不是中心知识。@user589117当您对以下内容感兴趣时,请尝试一下:)抱歉,我输入了错误的参考资料。刚刚更新。MS Access恐怕不支持大小写。@请删除,然后让我们
短路
;)@我找到了Remou Bingo和其中一个;)@邦科迪戈:最后,这对我帮助很大,谢谢你的支持@用户589117当你感兴趣时,请尝试一下:)对不起,我放错了参考号。刚刚更新。MS Access恐怕不支持大小写。@请删除,然后让我们
短路
;)@我找到了Remou Bingo和其中一个;)@邦科迪戈:最后,这对我帮助很大,谢谢你的支持!为什么您认为SQL Server答案适合MS Access问题?您是否将MS Access答案添加到SQL Server问题中?因为标题是一种通用的“将列附加到查询结果”,而这是在我搜索SQL标记时出现的,所以我想有人可能会访问此页面,查找类似的答案,但SQL表除外。这就是我添加响应的逻辑。我是个新手,很明显你不是,如果这不是一个有用的方法,我不会再这样做了。我想你会发现很多标题都是非常通用的,因为不鼓励在标题中添加标签,所以你不应该在一天内添加,例如“在MS Access中添加查询结果列”,因为MS Access出现在标签中。这意味着您需要检查标题和标签,以了解问题的来源。祝你好运,玩得开心。为什么你认为SQL Server的答案适合MS Access的问题?您是否将MS Access答案添加到SQL Server问题中?因为标题是一种通用的“将列附加到查询结果”,而这是在我搜索SQL标记时出现的,所以我想有人可能会访问此页面,查找类似的答案,但SQL表除外。这就是我添加响应的逻辑。我是个新手,很明显你不是,如果这不是一个有用的方法,我不会再这样做了。我想你会发现很多标题都是非常通用的,因为不鼓励在标题中添加标签,所以你不应该在一天内添加,例如“在MS Access中添加查询结果列”,因为MS Access出现在标签中。这意味着您需要检查标题和标签,以了解问题的来源。祝你好运,玩得开心。