2017-10-11 68 views
0

我实际上试图保留重复项,以便可以在报告中多次列出它们。我有一个适用于不止一个品牌项目,我用了一系列的复选框的每个记录表明它是否适用于品牌或不:尝试在Access 2003中的左侧加入重复项SQL

Item1 brand x 
Item2 brand y,z 
Item3 brand y 

理想情况下,我希望能够选择在查询记录,这样我可以运行通过品牌组合的报告,显示出复制任何地方发生:

Item1 x 
Item2 y 
Item2 z 
Item3 y 

一切我能找到的关于摆脱重复的。向所有解决方案开放。非常感谢帮助。 (我有一些经验的代码,但到目前为止,SQL和一般的访问是自学成才。)

+0

你的表格结构是什么样的? – bbrumm

+0

品牌在主表中的9列左右设置为“是/否”值。品牌表中包含品牌的全名,然后是显示它们适用的是/否列。有几个“父母”品牌,因此是重复的。 – RSDD

+0

老实说,如果通过使用INSERT创建临时表的记录消除连接和循环将是一条更好的路径,我也对此表示赞同。 – RSDD

回答

0

根据您的表结构,这个查询应该工作:

SELECT itemname, 'Brand1' AS brand 
FROM maintable 
WHERE brand1 = 'Y' 
UNION ALL 
SELECT itemname, 'Brand2' 
FROM maintable 
WHERE brand2 = 'Y' 
UNION ALL 
SELECT itemname, 'Brand3' 
FROM maintable 
WHERE brand3 = 'Y' 
UNION ALL 
SELECT itemname, 'Brand4' 
FROM maintable 
WHERE brand4 = 'Y' 
UNION ALL 
SELECT itemname, 'Brand5' 
FROM maintable 
WHERE brand5 = 'Y' 
UNION ALL 
SELECT itemname, 'Brand6' 
FROM maintable 
WHERE brand6 = 'Y' 
UNION ALL 
SELECT itemname, 'Brand7' 
FROM maintable 
WHERE brand7 = 'Y' 
UNION ALL 
SELECT itemname, 'Brand8' 
FROM maintable 
WHERE brand8 = 'Y' 
UNION ALL 
SELECT itemname, 'Brand9' 
FROM maintable 
WHERE brand9 = 'Y' 

它使用了几个UNION ALL报表以确保显示所有记录。

如果表格的列设置为Y,它将在结果集的第二列中显示品牌名称。这将允许您在单个结果集中显示项目名称和品牌列表。

您需要重新命名我的查询中的itemname列,maintainable以及每个brand1-9列以匹配您的表。

除了9个语句和一个UNION ALL之外,可能还有更好的方法,但这应该起作用。

这是否给你你需要的东西?

+0

我必须添加一个LEFT JOIN才能到达另一个表中的品牌全名,这允许我只将一个“品牌”分组,而不是每个品牌。 SELECT tblLiterature.LitNo,tblLiterature.LitDate,tblLiterature.Rev,tblLiterature.LitDescription,tblLiterature.ModelNos,tblLiterature.ChangeDescription,tblLiterature.LitStatus,tblBrands.BrandFullName,tblLiterature.Brand1 FROM tblBrands LEFT JOIN tblLiterature ON(tblBrands.Brand1 = (((tblLiterature.LitStatus)=“R”)AND((tblLiterature.Brand1)= -1)) UNION ALL 但是这有很大的帮助。谢谢! – RSDD