我是一名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
我想查询一下,向我展示所有连接
我对格式化表示歉意。任何帮助表示赞赏。我看过立方体和汇总,但不知道如何适用于这种情况。
答案 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对未来的某个人有用!