2

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

我有两个表(为简单起见进行了概括):

表对象

Object_PK

表组件

Component_PK
Object_FK
Component_Type

Component_Type_Code 中有 100 多个不同的值。鉴于任何对象都可以有 N 个组件,我如何查看哪些 Component_Type(s) 与其他 Component_Type(s) 一起出现?

例如,以下查询告诉我哪些 component_types 与 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

我想查询以显示所有连接

我为格式化道歉。任何帮助表示赞赏。我看过多维数据集和汇总,但不知道如何应用于这种情况。

4

2 回答 2

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 对将来的某人有用!

于 2012-09-23T15:41:21.767 回答
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 重复。最后;

选择 * 从 #TempComponents

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

于 2012-09-21T20:20:58.813 回答