自我加入一个显示父子关系的表

时间:2014-12-19 15:17:14

标签: sql sql-server

我有一张名为sales的表格。其中有catiddescparentforeignkey列,记录如下:

catid       desc        parentforeignkey 


   1,       clothes,         1
   2,       shoes,           1 
   3,       socks,           1
   4,       gloves,          1
   5,       mittens,         4
   6,       leather gloves,  4 
   7,       plain gloves,    4


...

如何构建查询以显示此关系?

1 个答案:

答案 0 :(得分:1)

我可以对此采取行动,但我很难看到这个问题。我觉得你想要一个查询按父外键对选择进行分组,然后列出每个父项的catid和desc。所以基本上像

SELECT t.parentforeignkey, t.catid, t.desc
FROM table1 as t
GROUP BY t.parentforeignkey, t.catid, t.desc;

注意:小心使用" desc"作为列名,DESC是用于降序的保留字(用于排序)

这会给你一个像:

的结果

ParentForeignKey | CatID | Desc 1 1 Clothes 1 2 Shoes 2 2 Shoes 3 1 Clothes

所以诀窍是使用GROUP BY来分配父组和子组。但要小心,因为按命令分组的顺序很重要(GROUP BY Catid, ParentforeignKey产生的结果与我上面列出的结果不同)。此外,您需要明确说明每列与分组的关系。如果你留下一个列,你可能会收到类似&#34的错误(取决于你的DBMS);你试图指定一个不包含指定表达式的查询作为聚合函数的一部分&# 34;

编辑:我现在看到您在问题中包含了DBMS。如果您正在使用BIDS或SSRS,那么这非常容易,您只需选择数据的查询(并过滤您想要的任何内容),然后您将转到Tablix控件并将详细信息的父组定义为catid,将catid的父组定义为foreignparentkey,然后表格应该自行处理!