从多个其他表生成SQL(摘要)表

时间:2011-12-01 22:01:25

标签: c# sql ms-access ms-access-2007

我有一个由几个子部分组成的单元。每个子部件都有一个表,看起来像这样:

Part#ID    PartBarcode   BuildDate   comments
------    -----------   ---------   --------
##        someBC        datetime    string
##        someBC        datetime    string
##        someBC        datetime    string
....

我有上面的3个表

然后我有一个子部分表,如下所示:

PartID    PartSubBarcode1   PartSubBarcode1    PartSubBarcode1   BuildDate   comments
          (project code)    (intraproject S/N) (Antenna presence)
------    ---------------   ---------------    ---------------   ---------   --------
##        ABC               123                Z                 Datetime    string
##        ABC               124                X                 Datetime    string
##        ABC               125                Z                 Datetime    string

编辑:每个条形码子部分代表物理/项目属性。

当它们全部组装完成后,我有一个以子部件为单位的表格

AssembledUnitID   Part1ID   Part2ID   Part3ID   Part4ID   ActiveState
---------------   -------   -------   -------   -------   -----------
##                ##        ##        ##        ##        true
##                ##        ##        ##        ##        false
##                ##        ##        ##        ##        true
...

我想创建一个表格,其中包含活动组合单位中所有子部分的条形码。额外的问题是,因为我有1个子部分,条形码实际上分成多个列,我需要一些方法将组件连接成一个字符串供用户查看(或者不是真的......不是太大的交易)。

Part1BC   Part1BuildDate Part2BC Part2BuildDate  ...
-------   -------------- ------- --------------

此处的最终游戏是在C#.NET中的WinForm上填充datagridview对象,以便用户导航并查看库存状态。 这将是一个填充此表的SQL语句。只要最终结果相同,代码的简洁性实际上并不重要。

我的新手SQL技巧与阅读论坛帖子和帮助文档相结合真的让我头疼。我一直在尝试不同的SELECT语句,但它们似乎都没有真正让我在任何地方。

其他信息: 我正在使用C#.NET中的数据网格视图进行winform 我正在连接到Access 2007 .mdb数据库。我将查询存储在.xsd文件中的C#解决方案中。 还需要更多信息吗?


修改 做到了!这就是我为解决这个问题所做的一切! 在C#.xsd设计器中,我创建了一个新的DataTable。通过数据表的表适配器,我创建了一个包含以下文本的查询:

SELECT 
            UnitBarcodes.GroupID + UnitBarcodes.Version
                + UnitBarcodes.SubSerial + UnitBarcodes.AntennaStatus AS [Unit Barcode],
            Subpart1.Barcode AS [part1 Board Barcode],
            Subpart2.Barcode AS [part2 Board Barcode],
            Subpart3.Barcode AS [part3 Board Barcode],
            AssembledUnits.DateAssembled AS [Date Assembled],
            Subpart1.OnBoardBuildDate AS [Firmware Build Date] FROM  ((((MainBoards INNER JOIN
            AssembledUnits ON Subpart1.ID = AssembledUnits.Subpart1ID)
    INNER JOIN
            UnitBarcodes ON AssembledUnits.UnitBarcodesID = UnitBarcodes.ID)
    INNER JOIN
            Subpart2 ON AssembledUnits.Subpart2ID = Subpart2.ID) 
    INNER JOIN
            Subpart3 ON AssembledUnits.Subpart3ID = Subpart3.ID)
    WHERE     (AssembledUnits.ActiveState = ?) AND (AssembledUnits.DateAssembled > ?)

填写dataTable后,我设置了

bindingSource1.DataSource=
dataGridView2.AutoResizeColumns();

(在我调用查询之前,我还设置'dataGridView2.AutoGenerateColumns = true;',当然在我的表单上创建了dataGridView2对象)

瞧,瞧!有用!什么是学习经历(并且比我最初想的更简单)

2 个答案:

答案 0 :(得分:1)

请勿在一个查询中执行

这是一个中等复杂的问题,由于不想编写代码,你会变得更加困难。此外,MS Access在编写查询方面比SQL Server数据库有更多限制,因此您可能会发现它更加困难。

答案 1 :(得分:1)

假设您的PartID在所有表中都是唯一的,您可以尝试使用视图:

首先按如下方式声明您的观点:

(请注意,我已经在[方括号]中包含了用于重命名的表格)

CREATE VIEW View_AllSubparts AS

SELECT PartID, PartBarcode AS 'Barcode', BuildDate FROM [SubpartTable1]
UNION
SELECT PartID, PartBarcode AS 'Barcode', BuildDate FROM [SubpartTable2]
UNION
SELECT PartID, PartBarcode AS 'Barcode', BuildDate FROM [SubpartTable3]
UNION
SELECT PartID, PartSubBarcode1 + PartSubBarcode2 + PartSubBarcode3 AS 'Barcode', BuildDate FROM [SpecialSubpartTable]
GO

从那时起,您可以像在表格中一样在语句中引用此视图。

从那里,您可以通过多次加入此视图来为您的单位构建选择

SELECT Part1.Barcode, Part1.BuildDate , Part2.Barcode, Part2.BuildDate , Part3.Barcode, Part3.BuildDate , Part4.Barcode, Part4.BuildDate 
FROM [AssembledUnit]
JOIN View_AllSubparts Part1 ON AssembledUnit.Part1ID = Part1.PartID
JOIN View_AllSubparts Part2 ON AssembledUnit.Part2ID = Part2.PartID
JOIN View_AllSubparts Part3 ON AssembledUnit.Part3ID = Part3.PartID
JOIN View_AllSubparts Part4 ON AssembledUnit.Part4ID = Part4.PartID

请注意,我不定期使用Access 2007,但我做了一个快速检查,我认为这里没有任何Access会拒绝。让我知道。