問題タブ [common-table-expression]

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.

0 投票する
2 に答える
774 参照

sql - MSSQLサーバーとツリー

以下に定義するように、ツリーテーブルからデータを抽出する方法を探しています。

テーブルツリーの定義:
-TreeID uniqueidentifier
TreeParent uniqueidentifier
TreeCode varchar(50)
TreeDesc varchar(100)

一部のデータ(23k行)、親参照をテーブルのIDに戻す

次のSQLは、ツリー全体をレンダリングします(約2分30分かかります)

私は次のことをする必要があります。

1)各ツリーノードをそのLVL 1親で
レンダリングします。2)「SomeText%」のようなTreeDescと一致する説明を持つすべてのノードをレンダリングします
。3)単一のツリーID用のすべての親ノードをレンダリングします。

アイテム2と3は2分30かかるので、これはもっと速くする必要があります!
項目1は、SQLを強制終了したり、永久に使用したりせずに、それを実行する方法を理解できません。

どんな推測も役に立ちます

ありがとう

ジュリアン

0 投票する
2 に答える
290 参照

sql-server - CTEを使用したジャンクションテーブルの値の統合と重複の削除

私は次のスキーマを持っています:

データのユーザーがSegments.Namesを統合したいと考えており、新しいSegment.Namesにマップされている現在のSegment.Namesのリストを教えてくれました(すべて現在存在しています)。

これで、このリストが一時テーブルにあり、マップ先のcurrentIDとnewIDが含まれています。

私がやりたいのは、このマップに基づいて、SegmentsParcelsのSegmentIDを更新することです。私は次のステートメントを使用できます:

しかし、これによりいくつかの重複が作成されます。SegmentParcelsのParcelIDとSegmentIDに一意の制約があります。

これを行うための最良の方法は何ですか?制約を削除してから、重複を削除することを検討しました(これは、ある時点で実行し、おそらく再度実行できます)が、もっと簡単な方法があることを望んでいました。

0 投票する
1 に答える
223 参照

sql-server - 共通テーブル式を使用して SQL Server で重複がないことを確認する方法

それ自体を参照するテーブルがあります。

ユーザーテーブル:id, username, manageridおよびmanageridリンク先id

今、私は直属のマネージャー、直属のマネージャーのマネージャーなどを含むすべてのマネージャーを取得したい...問題は、unstop recursive sql を持ちたくないということです。

そのため、ID が既にリストにあるかどうかを確認したいので、もう含めません。

そのための私のSQLは次のとおりです。

問題は、次の行にあります。

SQL Server は、idlist の初期化として ' ' を配置できないと文句を言います。nvarchar(40) も機能しません。このような共通テーブル式内で宣言する方法がわかりません。通常、db2 では、varchar(40) を配置するだけです。

私のサンプルデータ:

私がやりたいことは、c guy のすべてのマネージャーを見つけたいということです。結果は次のようになります: admin, a, b.

ManagerID は NULL を許可せず、一部のユーザーは直属のマネージャーを持たないため、一部のユーザーは自分のマネージャー (管理者など) になることができます。

共通テーブル式では、無限再帰につながる可能性があります。そのため、IDを2回含めないようにすることで、その状況を回避しようとしています。たとえば、1 回目の反復では既に id : 1 があるため、2 回目以降の反復では 1 は許可されません。

また、現在のアプローチが良いかどうか、および他の解決策があるかどうかも尋ねたいと思いますか? 深い階層を持つ大きなデータベースがある場合、それを保持するために大きな varchar を初期化する必要があり、メモリを消費しますよね?

0 投票する
1 に答える
318 参照

sql - 2 つの共用体を持つ共通テーブル式カウンター

母と父を持つ家族に共通のテーブル式がある場合、「世代」カウンターをインクリメントするにはどうすればよいですか? 家族は、子供を世代 0、親を世代 1、4 人の祖父母を世代 2 として持つ必要があります。ただし、ループは祖父母のセットごとに 1 回ずつ、2 回実行されます。

0 投票する
6 に答える
11087 参照

sql - SQL Server での再帰的な結果セットの並べ替え

XML スタイルの階層を返すクエリを作成するのが非常に困難です。

Web サイトの URL の階層を含むデータベース テーブルがあります。テーブルには次の列が含まれます: ID、URL、DisplayName、ParentID、ItemOrder

親 ID は、現在のアイテムとその親の間に再帰的な関係を形成します。アイテムは階層内でその親の下に配置する必要があり、階層内の同じレベルにあるアイテムに対してアイテム順序を使用して順序付けする必要もあります。

再帰クエリを機能させることができたので、階層を順番にドリルダウンしますが、アイテムの順序でこれを注文することもできません。

私の現在のクエリは以下のとおりです。

0 投票する
3 に答える
21990 参照

sql-server - SQLServerでのWith句の使用

withSQL Serverで句はどのように機能しますか?それは本当にパフォーマンスを向上させるのでしょうか、それともより読みやすいスクリプトを作成するのに役立つのでしょうか?

いつ使うのが正しいですか?with使用を開始する前に、句について何を知っておく必要がありますか?

これが私が話していることの例です:

http://www.dotnetspider.com/resources/33984-Use-With-Clause-Sql-Server.aspx

0 投票する
1 に答える
1039 参照

sql - 部門とマネージャーのリストを作成するためのCTE(階層型)

会社の部門のマネージャーまたはマネージャーのマネージャーであるユーザーのリストを生成する必要があります。

2つのテーブルがあります。1つは部門の詳細を示し、もう1つはマネージャー階層を含みます(簡略化)。

基本的に、DepartmentIdのリストと、その部門のマネージャー階層にあるすべてのManagerIdを提供するCTEを構築しようとしています。

つまり...マネージャー1が部門1のマネージャーであり、マネージャー2がマネージャー1のマネージャーであり、マネージャー3がマネージャー2のマネージャーであるとしましょう。

基本的に、マネージャーはサブマネージャーのすべての部門に対応できます。

マネージャー階層を返すためのCTEの構築はかなり簡単でしたが、そこに部門を注入するのに苦労しています。

すべての部門と関連するすべてのマネージャーのリストが必要です。

誰か助けてもらえますか?

0 投票する
1 に答える
230 参照

sql-server - この単純なケースのピボット クエリを作成するにはどうすればよいですか?

ピボットが必要な非常に単純なクエリがありますが、文献で読んだものからピボット テーブルに変換する方法の手がかりがありません。私が読んだものはすべて、ハードコードされた列が含まれているか、複雑すぎます。もっと単純にする必要があります。そうしないと、CTE を把握できません。

クエリは、アクセス権を持つユーザー名とクライアントのリストです。だから私は次のようなものを持っています:

クライアントの総数は、約 20 人程度である可能性があります。すべてのクライアントにアクセスできるユーザーもいれば、1 つまたは 2 つのクライアントにしかアクセスできないユーザーもいます。私が見たいのは:

これには、ユーザー テーブル、クライアント テーブル、およびユーザーとクライアントを結び付ける相互参照テーブル (権限) の 3 つのテーブルが含まれます。

私は次のようなことを試しましたが、明らかに動作しません (またはコンパイルさえしません)。

どんな手がかりも大歓迎です!

0 投票する
3 に答える
2592 参照

sql - CTEまたはサブクエリを介して部下とレコードを更新する

次の列を持つテーブルがあるとします。

従業員テーブル

managerIDはemployeeIDを参照します。totalOrganizationは現在、すべてのレコードで0です。

各行のtotalOrganizationを、その下の従業員の総数に更新したいと思います。

したがって、次のレコードを使用します。

クエリはtotalOrganizationsを次のように更新する必要があります。

私はある程度の組織を手に入れることができることを知っています。次のCTEを使用したチャート:

データを解析するためにSQLの外部でルーチンを構築するのではなく、ストアドプロシージャを使用してEmployeesテーブルを更新する方法はありますか?

0 投票する
2 に答える
167 参照

sql - これは Sql 2005 CTE で可能ですか?

私は、期日とタスクを完了するのに必要な分数に基づいて、製造ラインの推奨開始日を返すクエリに取り組んでいます。

製造ラインごとに、その日に予定されている分数を表示するカレンダー テーブル (LINE_ID、CALENDAR_DATE、SCHEDULED_MINUTES) があります。

例: (通常、1 日あたり 3 シフト分の時間が予定されています。週末はありませんが、変動する可能性があります)

提案された開始日を取得するには、期日から始めて、タスクを完了するのに十分な時間が蓄積されるまで、日を下向きに繰り返す必要があります。

私の質問は、CTEでこのようなことを行うことができますか、それともカーソルで処理する必要がありますか? それとも...私はこれについて完全に間違った方法で進んでいますか??