2

私は、レガシー システムでデータ分析を行う学士/プログラマー タイプです。私は自分で SQL を学んでいますが、自分の能力よりも大きな問題に直面しているようです。

2 つのテーブルがあります (簡単にするために一般化されています)。

テーブル オブジェクト

Object_PK

テーブル コンポーネント

Component_PK
Object_FK
Component_Type

Component_Type_Code には 100 以上の異なる値があります。任意のオブジェクトが N 個のコンポーネントを持つことができる場合、どの Component_Type が他の Component_Type と一緒に表示されるかを確認するにはどうすればよいですか?

たとえば、次のクエリは、component_type 'Component_type_1' で表示される component_types を示します。

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

したがって、私が正しく理解している場合は、各コンポーネントで複数回発生するすべての 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
)

編集

要件の複雑さを考慮すると、すべてを 1 つのステートメントにまとめるのは難しいでしょう。

したがって、1 つの component_type に対して機能するコードがあるので、そのデータを一時テーブルに挿入してから、他の各 component_type に対して繰り返します。ついに;

SELECT * FROM #TempComponents

これは理想的ではないことは承知しており、新しい component_type を追加したいと思うかもしれませんが、うまくいきます。

于 2012-09-21T20:20:58.813 に答える
0

良い答えをありがとう。DBA の友人数人にこの質問を電子メールで送信したところ、そのうちの 1 人が次の 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 に答える