問題タブ [cross-join]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - データテーブルでクロス結合を実行する方法
データテーブル ( table1 X table2 X table3 X n テーブル) でクロス結合 (多対多の関係) を実行します。これは、for/foreach ループまたは linq を使用して実行できます。
注: .xls ファイルからデータを読み取っているため、SQL クエリを実行できません。
mysql - テーブルを結合して、ソーステーブルの行ごとに1つの行を取得するにはどうすればよいですか?
2つのテーブルに2種類のエンティティがあり、共通の列の1つで結合して並べ替える共通の列がいくつかあります。結果のテーブルでは、各行は1つのテーブルの行または別のテーブルの行のいずれかを表す必要があります。たとえば、次のようなテーブルの場合:
それらに参加するためのクエリの私のアイデアは次のようになります:
このクエリにはいくつか問題があります。
私がどのように
CROSS JOIN
機能するかを理解している場合、クエリは非常に遅くなります。可能な限りすべてのアップルとオレンジの組み合わせを通過するからです。より速い方法はありますか?関数は
IF(...)
見苦しいです。それらは本当に必要ですか?
join - MDX クエリでのグループ化
私はMDXの世界に非常に初心者です..
3 行のみに基づいて列をグループ化したい。ただし、4行目も結合する必要があります..私のクエリは次のとおりです。
出力は次のようになります。
しかし、出力を次のように表示したい:
つまり、最初の 2 行をグループ化して、3 列目に「ALL」が重複しないようにしたい..
前もって感謝します
sql - Access 2003 で CROSS JOIN + INNER および/または OUTER 結合を使用することは可能ですか? もしそうなら、どのように?おそらくサブクエリも必要です...?
[Plan Revenue]、[Plan Revenue Expense]、[Support Provider]、[Z Service Codes New] の複数のテーブルを含むデータベースがあります。
過去 6 か月間に特定のサービス コードで各プロバイダーにリストされた経費レコードの数をカウントするクエリを既に作成しています。唯一の問題は、理想的には、過去 6 か月間に費用が記録されていないサービス コードにも 0 をリストすることです。
したがって、基本的には、[Z Service Codes New] テーブルと [Support Providers] テーブルをクロスして、プロバイダーとすべてのサービス コードの間で考えられるすべての一致を取得したいと考えています。次に、各サービス コード内で、過去 6 か月以内の経費レコードの数をカウントするようにします (実際にはカスタム日付を設定して、より柔軟にしています)。
しかし、すべての経費レコードをすべてのサービス コードと照合するのではなく、正しいサービス コード内に該当する経費レコードのみを照合するように、これを行う方法に行き詰まっています。
[Plan Revenue].[Service] は、[Z Service Codes New].[Service Code] [Plan Revenue].[Rev ID] は、[Plan Revenue Expense] まで一致する外部キーです。 [RevID] [Plan Revenue Expense].[SP] は、[Support Provider].[ID] に一致する外部キーです。
簡単にするために、データベース ビルダーがテーブル間でキーを一致させなかった理由を聞かないでください。それはまさにそれが何であるかです...
私の現在のクエリは次のようになります。
[IC?], [DE?], [Agency?], [GeneralBus?]
サポート プロバイダーのタイプを示す単なるブール フィールドです。繰り返しますが、なぜデータベース担当者は、外部キーを持つ単一のフィールドではなく、これを選択したので、あなたは 1 つのタイプのプロバイダーにしかなれなかったのでしょうか?
そのため、現在もサブクエリを使用しています。
しかし、費用が関連付けられていないサービス コードにゼロが返されるわけではありません。それは私に実際の費用のカウントを与えるだけです.0を気にしなければ問題ありません.私自身の啓発のためだけに.
私はこのことを最後の日かそこらで回っているように感じます、そして私の脳は友達です. 2 番目の目が必要です。
[Support Provider] と [Z Service Codes New] をクロス結合して、考えられるすべてのマッチアップを取得し、関連する経費レコードがない場合は 0 を、経費がある場合は COUNT を選択的に指定する必要があると思います。記録。しかし、いずれにしても、サポート プロバイダーごとに 1 つのサービス コードが必要です。
Access で CROSS JOIN を INNER JOIN または OUTER JOIN と組み合わせるための構文がわかりませんか? そして、私の目的にとって最良の組み合わせは何でしょうか。どういうわけかサブクエリなしで逃げることはできますか、それともまだ必要ですか? CROSS JOIN と比較して、これを完全に行うためのより良い方法はありますか? (CROSS JOIN が設計されたのはそのようなものだと思います...しかし、私は間違っている可能性がありますか?)
すべてが理にかなっていることを願っています。考え?ああ、私は Access 2003 Professional SP3 を使用しています。
編集:
さて、私自身のエレガントな解決策 (まあ、それがエレガントかどうかはわかりませんが、うまくいきます!) は、メインの FROM 行で 2 つのカスタム SELECT ステートメントを作成し、2 つの一致基準に基づいて 2 つの SELECT ステートメントを結合することです。 :
問題が解決しました!
問題を言語化する必要があることは、実際の問題が何であるか、クロス積にする必要がある特定の情報と、より標準的な結合操作にする必要がある情報を自分で検討するようになったため、解決策にたどり着くのに役立ったと思います2つのセットを適切にリンクする方法...
〜MG(私)
mysql - (0,1)^ Tでテーブルをクロス結合するための好ましい方法は?
テーブルT1があり、2行の新しいテーブルを取得したいと思います。0(T1の1つのコピーの場合)と1(T1の2番目のコピーの場合)を取得する追加の列です。
つまり、T1を、1つのブール列とすべての可能な値を持つ定数テーブルと相互結合したいと思います。
MySQLでこれを行うための最良/最も効率的/より適切な方法は何ですか?
sql-server-2005 - 常に同じ文字列メッセージでクロス ジョインする
Microsoft SQL Server 2005 を使用しています。
同じ文字列メッセージを持つ列のみを含むテーブルとのクロス結合で、重複する値に関する列を含むテーブルを出力したいと考えています。「文字列メッセージ」を使用したクロス結合が適切な方法であると思います。
次のスクリプトが機能しないのはなぜですか?
sql-server - 交差結合を避ける
Student、Question、Answer の 3 つのテーブルがあります。Answer には、Student と Question の両方に対する FK があります。学生と質問にクロス結合を使用しました。
このプロシージャの目的は、与えられた学生/質問に対応する回答があるかどうかを判断することです。私の質問は、同じ目標を達成するためにクロス結合を使用しない方法はありますか? さらに、回答エントリを含むセットを返すことをお勧めします。
sql - 同じテーブル内のNセットの行を相互結合します
一般的な「Dimension」テーブルと「DimensionMember」テーブルがあります。
これらのテーブルには、多数のディメンションとディメンションメンバーが格納されます。
可変数の次元から次元メンバーを相互結合したい。例:「性別」、「雇用タイプ」、「契約タイプ」ディメンションのクロス結合ディメンションメンバーは、次の組み合わせを生成する必要があります
組み合わせのラベルは、ディメンションメンバーのラベルを連結して作成する必要があります(上記のとおり)。
前もって感謝します
アップデート
ディメンションのリスト(たとえば、「性別」、「雇用タイプ」、「契約タイプ」)は動的です(実行時に別のクエリによって生成されます)。
更新2
小さなエラーを修正しました(Dimension1-> Dimension)。ごめん!
performance - かなり複雑なソースから大規模なレポート クエリを作成する最善の方法についてアドバイスが必要です
他の回答を検索して、この特定の質問が既に尋ねられているかどうかを確認した後 (および他のフレーバーが尋ねられました - 問い合わせる必要があるすべてをカバーしていないだけです)、次のシナリオを提示し、ほとんどのアドバイスを求めたいと思います。このレポート クエリを作成する効率的な方法。これは冗長な投稿であり、残念ながら T-SQL コードを投稿することは許可されていません。私の雇用主は明示的に禁止しています。
私が何年にもわたって学んだことの1つは、私よりもはるかに多くのことを知っている人がたくさんいるということです.
すべてのテーブルには主キーがあり、子テーブルにリンクするテーブルがある場合は、外部キーが配置されています。データベースとレポート サーバーは SQL 2008 R2 です。サーバーは 128GB の RAM を実行し、4CPU クアッド コアのハイパー スレッド化された野獣です。
まず、場所、セクション、およびエリアを含む一連のテーブルがあります。ロケーションはマッピング テーブルを介してセクションにリンクされます。セクションには複数のロケーションがあり、セクションはマッピング テーブルを介してエリアにリンクされ、複数のセクションがエリアにリンクされます。これらのテーブルはすべてデータベース「A」にあります。別のデータベース「B」にビューを作成しました。これは、迅速に実行される優れた結果セットでエリア - セクション - ロケーションのリンクを表します。これを LocationSectionArea ビューと呼びます。
データベース「B」では、何千人ものユーザーが、自分の仕事のあらゆる種類のカテゴリに関する毎日の統計を入力しています。現在91のカテゴリーがあります。各カテゴリには、約 3 から最大 25 までのサブカテゴリが含まれます。カテゴリとサブカテゴリの数は、管理インターフェイスを介して追加または削除され、いつでも変更できます。これらのリンクを表し、CategorySubCategoryFields ビューと呼ばれる結果セットを返すビューを作成しました。
これらのカテゴリ/サブカテゴリ リンクごとに収集される情報はさまざまです。約 8 つの異なるフィールドが必要なものもあれば、3 つしか必要ないものもあれば、1 つしか必要ないものもあります。これらのフィールドは、適切なサブカテゴリにリンクされています。これもデータベース「B」に含まれています。
私は、このデータベースでこのデータをうまくまとめるビューを構築しました。これは、非常に簡単にレポートできる方法でデータを提示する結果の大きなマトリックスになります。これまでのビューの実行は、速度。これを UserStatsView と呼びます。これはデータベース「B」に含まれています。
ここで、データを入力するユーザーは、前述のいずれかの場所に割り当てられます。結果は、セクション内のすべての場所、およびエリア内のすべてのセクションを表示する必要があり、各場所について、そのカテゴリの各カテゴリとサブカテゴリを表示する必要があります。次に、これを UserStatsView からの結果にリンクする必要があるため、これらの結果のマトリックスがかなり大きくなり、結果のない多くの 0 が混在しますが、これらはレポート目的で作成されます。
レポートは、ユーザーがセクションを選択できるようにする必要があります。たとえば、セクションを選択し、そのセクションに含まれるすべての場所のレポートを、その場所に対してユーザーが入力した結果の集計とともに、カテゴリとサブカテゴリの組み合わせごとに生成できるようにする必要があります。がある。ユーザーが入力した実際の結果があるかどうかに関係なく、セクションのすべての場所とすべてのカテゴリ-サブカテゴリを表示する必要があります。そのため、一部のレポートには多くの 0 が含まれる場合があります。
これを実現するために、LocationSectionArea を CategorySubCategoryFields ビューと交差結合する結果ビューを作成しました。これにより、必要な基本的なマトリックスが作成されました。次に、このマトリックスを UserStatsView の結果に結合し、LocationId、CategoryId、および SubCategoryId を結合して、場所のユーザーの結果を挿入しました。これはすべてデータベース「B」に作成されます。
これですべてが機能し、レコードの数を減らすために最後の where 句に十分なフィルターを指定すれば「OK」です。イメージできるように、より大きな結果セットでレポートを実行しようとすると、非常に遅くなり始めます。(つまり、すべての場所で 6 か月をカバーする日付範囲には 30 秒以上かかります)
私の問題の一部は、ロケーション情報がデータベース「A」からリンクされており、構築されたビューが、このレポートに必要な他のすべての情報のすべてのビュー テーブルとレコードと共にデータベース「B」に含まれていると考えていることです。
もう 1 つの部分は、非常に大規模で複雑な相互結合が作成され、ユーザーの結果のビューにリンクされていることです。クロス結合は、UserStatsView 結果セットと結合されるまで、インデックスや関連データのないデカルトの結果です。
そして、私が信じている 3 番目の問題は、SSRS にフィードできる結果構造を生成するために、すべての空白を埋めるためにデータが「作成」されているという事実です。テーブルのスプーリングとハッシュ結合に多くの実行時間がかかり、場所、セクション、およびエリアを使用したデータベースからの検索も行われていることがわかりました。これらはすべて、クエリ実行の見積もりプランを通じて示されました。
私が求めているのは、上記の基準を考慮して、この結果セットを生成するより良い方法があるかどうかを誰かが知っているかどうかです. これを行うための本当にシンプルで高速な方法を完全に見逃していましたか?これは非常に可能性が高いです:)。誰かが私が何を研究すべきかを提案できるなら、私は喜んでそれを実行します - ただ、この段階で何を研究すべきかわかりませんか?
乾杯
ロッド。
更新: 以下は、2 つのデータベースを定義するテーブル構造です。明らかに、実際のテーブルにはもっと多くの機能がありますが、これがそれらがどのように組み合わされるかの核心です。このような大きな投稿をお許しください。キー フィールドといくつかのデータ フィールドを除くすべてを削除したので、テーブルがどのように構造化されているかがわかります。テーブル名とフィールド名は、多くの余分なフィールドが削除された一般的な名前に変更されているため、コードを投稿できます。
データベース A
データベース B
ビュー: データベース A のエリア - セクション - ロケーション ビュー (vwAreasSectionsAndLocations)
データベース B のカテゴリ-サブカテゴリ ビュー (vwCategoryAndSubCategory)
2 つのビューをクロス結合して必要な結果マトリックスを作成するビュー (結果なし) (vwAreaSectionLocationCategorySubCategory)
使用統計結果を作成するビュー (vwUserStatsResults)
最後に、すべてをまとめたビュー (vwReportResults)
文字数制限の為、別エントリで投稿
sql - クロス結合の SQL Server サブクエリがエラーを返す
私はテーブルを持っていますA
、B
そしてC
。現在、テーブルはA
列A1
(主キー) として、テーブルB
には列B1
(主キー) があり、テーブルC
には列A1
(テーブルへの外部キーA.A1
)、B1
(テーブルへの外部キーB.B1
) があります。
今、テーブルで一致する行が見つかった場合は 1 に設定され、それ以外の場合は 0に設定されるビット列とA
からのすべての行をリストするクエリを作成しています。B
C
列と列Subquery returned more than 1 value.
を結合した後、クエリに重複する行がないにもかかわらず、このクエリはエラーを生成しています。A1
B1