Sql 将列追加到查询结果
我拥有以下Access 2007表格: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 |
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出现在标签中。这意味着您需要检查标题和标签,以了解问题的来源。祝你好运,玩得开心。