对于Access 2013,查询过高

时间:2015-06-26 19:36:09

标签: ms-access pivot query-optimization ms-access-2013

我需要优化以下查询。我知道这不是实现这一目标的方法。

查询

 SELECT 'A1' AS Location , A1 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A2' AS Location , A2 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A3' AS Location , A3 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A4' AS Location , A4 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A5' AS Location , A5 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A6' AS Location , A6 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A7' AS Location , A7 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A8' AS Location , A8 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A9' AS Location , A9 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A10' AS Location , A10 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A11' AS Location , A11 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A12' AS Location , A12 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A13' AS Location , A13 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A14' AS Location , A14 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'A15' AS Location , A15 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B1' AS Location , B1 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B2' AS Location , B2 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B3' AS Location , B3 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B4' AS Location , B4 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B5' AS Location , B5 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B6' AS Location , B6 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B7' AS Location , B7 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B8' AS Location , B8 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B9' AS Location , B9 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B10' AS Location , B10 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B11' AS Location , B11 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B12' AS Location , B12 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B13' AS Location , B13 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B14' AS Location , B14 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'B15' AS Location , B15 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C1' AS Location , C1 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C2' AS Location , C2 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C3' AS Location , C3 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C4' AS Location , C4 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C5' AS Location , C5 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C6' AS Location , C6 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C7' AS Location , C7 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C8' AS Location , C8 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C9' AS Location , C9 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C10' AS Location , C10 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C11' AS Location , C11 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C12' AS Location , C12 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C13' AS Location , C13 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C14' AS Location , C14 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'C15' AS Location , C15 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D1' AS Location , D1 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D2' AS Location , D2 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D3' AS Location , D3 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D4' AS Location , D4 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D5' AS Location , D5 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D6' AS Location , D6 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D7' AS Location , D7 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D8' AS Location , D8 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D9' AS Location , D9 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D10' AS Location , D10 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D11' AS Location , D11 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D12' AS Location , D12 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D13' AS Location , D13 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D14' AS Location , D14 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1 UNION ALL 
 SELECT 'D15' AS Location , D15 AS Qty FROM Inventory where PartNumber='1038305320' AND Version =1

TAble结构

Partnumber  Version Quantity A1 A2......A15 B1 B2.....B15 .......D15

我希望输出像这样

A1-10
A2-10
..
..
D15-10

在Access中显示查询太高了..请帮我优化一下

1 个答案:

答案 0 :(得分:1)

你真正想要的是什么叫做“univoting'”。不幸的是,没有办法解开' MS-Access中的信息。你是正确的union all是在MS-Access中实现这一点的唯一方法。

你可以从这里采取不同的方式:

  1. 您可以使用列(SELECT * ...)制作报告并进行复制 结果到MS-Excel,您可以在其中翻转生成的矩阵 复制粘贴(转置)动作。
  2. 您可以将MS-Access数据库链接到可以执行“无法转移”的后端数据库。命令。我是用MS-SQLserver做的。
  3. 您可以按照
  4. 中的不透实方式重新构建要在MS_Access中加载的输入

    Partnumber Version Location Quantity 1038305320 1 A1 10 1038305320 1 A2 15

    1. 创建仅包含位置的视图,然后在视图可用时选择partnumberversion

      CREATE VIEW storageLocations as SELECT 'A1' AS Location , A1 AS Qty FROM Inventory UNION ALL SELECT 'A2' AS Location , A2 AS Qty FROM Inventory UNION ALL SELECT 'A3' AS Location , A3 AS Qty FROM Inventory UNION ALL SELECT 'A4' AS Location , A4 AS Qty FROM Inventory UNION ALL SELECT 'A5' AS Location , A5 AS Qty FROM Inventory UNION ALL SELECT 'A6' AS Location , A6 AS Qty FROM Inventory UNION ALL SELECT 'A7' AS Location , A7 AS Qty FROM Inventory UNION ALL SELECT 'A8' AS Location , A8 AS Qty FROM Inventory ...

    2. 接着是

      SELECT * FROM storageLocations WHERE PartNumber='1038305320' AND Version =1 
      

      但是您在' UNION ALL'中包含的列数。 MS-Acces可能仍会抱怨大小...

      如果您可以影响MS-Access的直接环境,我的建议是选择2或3选项。