我有一个由几个子部分组成的单元。每个子部件都有一个表,看起来像这样:
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对象)
瞧,瞧!有用!什么是学习经历(并且比我最初想的更简单)答案 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会拒绝。让我知道。