2011-11-02 112 views
0

我正在处理类的分配,并且问题要求在同一个表的同一列中查找匹配项。并列出具有此匹配的所有行。让我只是发布问题以更好地解释它:SQL查找同一列中的匹配

列出相同项目类别中每对零件的零件号,零件描述和零件类。 (例如,一个这样的对将是部分AT94和部分FD21,因为这两个部分的项目类别都是HW。)

我不确定使用哪个函数来执行此操作。老师是否希望我们按课程分组结果?

回答

0

我打算给你一部分答案:

你需要配对。所以你基本上将GROUPING的项目数为2.

祝你好运!


附录:

请记住,使用聚合函数的SELECT毕竟项目不在GROUP BY。根据您使用的数据库引擎的不同,可能会有一些串联函数。

+0

没必要。成对项目只是项目1和项目2在列中具有相同值的项目。 – drdwilcox

+0

当然,总有不止一种方法可以得到你想要的东西。 OP可以加入自己的桌子并从中得到一些东西。不理想。 – MPelletier

+0

表示同意,但如果他想要来自两个项目的值在单个结果记录中,则必须进行自连接。 – drdwilcox

0

您正在寻找Group By。由于这是家庭作业,我不会提供一个具体的例子,但语法是一般

SELECT [COLUMNS] 
FROM [TABLE] 
WHERE [PREDICATE] --Okay, all that's normal in SQL 
GROUP BY [COLUMN] --This column should be a named column in your SELECT statement. 

更新:由于MPelletier说,你也想“具有”

快乐狩猎。

0

通常,班上的老师,助理或最聪明的孩子能够更好地解释老师的意图。但是,您不需要GROUP来解决这个问题。

-2

你应该自己加入表格。

像这样的东西可以把你在正确的轨道上:

select <list of fields> 
from parts p1 
inner join parts p2 on p1.item_class = p2.item_class 
where p1.part_number < p2.part_number 

有一对夫妇从这个声明的结果需要注意的地方。

例如:

您将获得在窗体上重复(A,B)和(B,A)

你会得到同样的每个项目与本身所加入(A,A)。

编辑:

固定的告诫(通过添加where子句)。

+0

这是一个尴尬的方法,因为连接会创建4个项目:item1-item1,item1-item2,item2-item1和item2-item2。然后你必须过滤所有的垃圾。 – MPelletier

+0

我得给学生留点东西,对吧? –

+0

我认为这个任务的截止日期已经过去了,所以我添加了“尴尬”的过滤器来摆脱“所有那些废话”。我怀疑使用“GROUP BY”和“HAVING”的解决方案比这更简单。 –

0

SELECT part_nr,part_desc,item_class 从零件 ORDER BY item_class

-1
SELECT F.ITEM_NUM, S.ITEM_NUM, F.DESCRIPTION, S.DESCRIPTION, F.CATEGORY, S.CATEGORY 
FROM ITEM F, ITEM S 
WHERE F.CATEGORY = S.CATEGORY 
AND F.ITEM_NUM < S.ITEM_NUM 
ORDER BY F.ITEM_NUM, S.ITEM_NUM;`