确定单个表中数据之间的连接

时间:2012-09-21 20:02:44

标签: sql analysis

我是一名BA /程序员类型,在遗留系统上进行数据分析。我一直在教自己SQL帮助,但我似乎遇到了比我的能力更大的问题。

我有两个表(为简单起见而推广):

表格对象

Object_PK

表格组件

Component_PK
Object_FK
Component_Type

Component_Type_Code中有100多个不同的值。假设任何对象可以有N个组件,我怎么能看到哪个Component_Type与其他Component_Type一起出现?

例如,以下查询告诉我component_type出现在component_type'Component_type_1'中的内容:

select component_type_code, count(*)
from components
where object_fk in (
        select object_fk
        from components
        where component_type_code = 'component_type_1'
)
group by component_type_code

我想查询一下,向我展示所有连接

我对格式化表示歉意。任何帮助表示赞赏。我看过立方体和汇总,但不知道如何适用于这种情况。

2 个答案:

答案 0 :(得分:0)

因此,如果我理解正确,您希望在每个组件中看到每个Component_Type出现多次。因此;

SELECT component_type_code, COUNT(*)
FROM components
WHERE object_fk IN(
        SELECT object_fk
        FROM components
        GROUP BY component_type_code
        HAVING COUNT(*) > 1
)

修改

考虑到您的要求的复杂性,很难将所有要求整合到一个陈述中。

因此,您拥有适用于一个component_type的代码,因此我将该数据插入临时表中,然后为每个其他component_type重复。最后;

SELECT * 来自#TempComponents

我意识到这并不理想,毫无疑问你可能想要添加新的component_type,但它会起作用。

答案 1 :(得分:0)

感谢您的好答案。我还将问题通过电子邮件发送给几个DBA朋友,其中一个回复了以下SQL:

 Select a.Component_Type, b.Component_Type, count(1)
 From Components a, Components b
 Where b.Object_FK = a.Object_FK
 And b.Component_Type > a.Component_Type
 Group By a.Component_Type, b.Component_Type

此语句返回关联的链接及其计数。它实际上非常酷的分析,我希望我没有必要概括表格和结果。感谢大家 - 我希望这个SQL对未来的某个人有用!