問題タブ [set-based]
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.
performance - T-SQL での While ループの回避
毎日夜に実行されるスケジュールされたジョブを開発する必要がありました。タスクは完了しましたが、While ループを使用する必要がありました。「罪悪感」を感じさせるものです。この操作をセットベースの操作に変換してパフォーマンスを向上させる方法についてアドバイスが必要です。
私のテーブルは次のようになります(可能な限り単純化しました):
while ループを使用した理由は、PoolID に関連する ContactID 値を (グループとして) 取得するためです。個別のプール ID 値を一時テーブルに格納し、これらのプール ID 値をループでフェッチします。したがって、While ループは、プール ID の個別の値をループします (すべてのテーブルを行ごとにループするのではありません)。更新操作を実行しています。のように示すことができます:
ここにすべてのクエリを書くことはできないので、状況をできるだけ明確に示すことができれば幸いです。
コメントの編集: 追加するのを忘れました。テーブル全体を更新できないのは、PoolID が上記の FK であるためです。そして、各 PoolID には Layer4ID があります。その PoolID の Layer4 値に応じて、プール内の各 ContactID に対していくつかの計算を行っています (状態に応じてプール内の各連絡先をカウントし、カウント結果が等しいかそれより大きいかどうかを確認するなど)。そのプールの Layer4 値より明確にするために、テーブルのデモンストレーション部分を編集します。
上記のように、各プールには Layer4ID があります。そして、各 Layer4 にはいくつかの条件があります。この場合、それらは両方とも整数です (ConditionValue1 は、更新される ContactID の最小数を示します (つまり、T_POOL テーブルの状態を更新します)。ConditionValue2 は、各連絡先の現在の日付から過去の月数を示します)。 (状態を更新するため) -ContactIDの作成日を自身のテーブルから取得-
Edit2 サンプルクエリにいくつかの結合を追加しました(構文エラー、グループ化などを無視します)
編集3
私の現在のクエリは次のように見ることができます: 簡単に言うと、これは while ループから「解放」する必要があります。つまり、@PoolID の使用を排除します。
sql-server - 行と依存行のセットを挿入するTSQL
私は2つのテーブルを持っています:
- 注文(ID注文IDフィールドを使用)
- OrderItems(注文IDへの外部キーを使用)
ストアドプロシージャには、複製する必要のある注文のリストがあります。カーソルなしでストアドプロシージャでこれを行う良い方法はありますか?
編集:
これはSQLServer2008にあります。
テーブルのサンプル仕様は次のとおりです。
ストアドプロシージャには'fred'のcustomerNameが渡されるため、CustomerName='fred'であるすべての注文のクローンを作成しようとします。
より具体的な例を挙げます。
フレッドにはたまたま2つの注文があります。
- 注文1の行番号は1、2、3です。
- 注文2の行番号は1、2、4、6です。
テーブル内の次のIDが123の場合、次を作成します。
- 行1、2、3で123を注文する
- 行1、2、4、6で124を注文する
php - MySQL: 複数行の結果に対する標準的なアプローチ VS セットベースのアプローチ
この質問に続いて、以下の場合、標準的なアプローチまたは再帰的なアプローチに問題があります。
たとえば、同じページを返したいのですがparent_id
、一部のページには複数の行のコンテンツがあり、
page
テーブル
content
テーブル
content structure
テーブル
標準的なアプローチ、
結果 (行を 4 つの項目としてリストします)、
お気づきのように、 と の2 つの行とpage_id 2
とのそれぞれに1 つの行3
があり4
ます。以下のような標準的なアプローチでデータを HTML に表示するにはどうすればよいですか(前の質問の回答の 1 つに示されているように)。
でもセット系ならこれでいけるし、
PHPで、
HTML(正しい3つの項目として行をリストします)、
これが理にかなっていることを願っています!
sql-server-2008 - 文字列内の文字の最長シーケンスを見つける方法
文字列内の文字の最長シーケンスを調べたい
たとえば、単語Honorificabcdwert
では、出力は になりますabcd
。
どうすればいいですか?
私の考えは、アスキーを取得してから、ある時点で壊れるまでシーケンスをカウントすることです。しかし、私は
この後、私は何をすべきかわかりません。これまたは他の方法で必要なヘルプ。
sql - サイクルをテーブルベースのクエリに変換する方法は?
IDTable
1つの列を持つテーブルがあり、パラメーターをID
受け取る1つのテーブル値関数MyProcedure
もあります。このパラメータは私の列ID
です。この関数はテーブルを返します。列のすべての値に対してこの関数を呼び出す必要がありますID
。私はそのようなコードを持っています:
whileサイクルを削除し、セットベースの代替を作成する必要があります。どうすればいいですか?
tsql - 更新しているテーブル内の列の値をサブ選択することは許可されていませんか?
トランザクション テーブル内の各スペア パーツの移動平均コスト (MAC) を計算するストアド プロシージャを作成しています。これは、各行の MAC のある種の自動チェックと修正です。カーソルを避けているため、セットベースのアプローチを使用しています。
私のトランザクションテーブルには次の列があります:
Transaction No -- 行の取引番号のレコード TransacType -- 取引タイプの値は、BEG (期首残高)、ISS (発行の場合)、および RR (受入株式の場合) になります。
在庫番号 -- 製品番号
コスト -- ストック番号の単位あたりのコスト
数量 -- トランザクションの数量
MAC -- 移動平均コスト
ルール: - トランザクションが RR の場合、Sproc は MAC を計算します。- 後続のすべての ISS トランザクションのコストは、最新の RR の MAC に等しくなります。
サンプルテーブル
移動平均コストの計算式:
私のMAC修正コード:
私の問題は、必要な変数 (TotalISS、TotalRR、CurrentMAC) が MAC 方程式に NULL を返すことです。
更新しているテーブル内の列の値を選択することは許可されていませんか? または私のソリューション自体にエラーがありますか?この例に基づいてソリューションを導き出しました-ここ。 カーソルを使いたくないので、このアプローチを使用しました。
私を助けてください。
sql - RBARを避けようとしています!関連するテーブルの挿入をセットベースの操作として関連付ける方法は?
次のテーブルで構成されるスキーマを想定します。
バズ
FooTemplate(Bazには0から多数のFooTemplateが含まれる場合があります)
BarTemplate(FooTemplateには0から多数のBarTemplateが含まれる場合があります)
Foo(A Bazには0から多数のFooが含まれる場合があります)
バー(A Fooには0から多数のバーがある場合があります)
ストアドプロシージャが毎日実行され、次の生成日を過ぎた関連エンティティのエンティティが生成Foo
されます。Bar
Baz
この手順の最初の部分は、次のようになります。
私の質問は、適切なエンティティを生成し、それらを新しく作成されたエンティティBar
に適切に関連付けるために、どのステートメントを実行できるかということです。Foo
編集:プロシージャは、SQLServer2005を実行しているサーバーで実行されます。
EDIT2:助けてくれたみんなに感謝します。情報を注意深く検討した後、私は別の解決策を選びました。Fooテーブルの主キーを自動生成されたID列ではないように変更しました。これにより、一時テーブルへの中間挿入を実行して、FooIDとともに関連するFooTemplateIDをキャプチャできます。
sql - メニュー階層を生成するためのこの手続き型SQLコードをSETベースのアプローチに変換するにはどうすればよいですか?
次の形式の階層情報を含むSQLServer2008R2データベーステーブルがあります。
必要な階層出力は次のとおりです。
注:「日付」という単語がノード「11月18日」から削除されていることに注意してください。
- 編集:一意の親子ノードのみが出力されます。たとえば、「プロジェクト1 \フェーズ1」ノードは1つだけですが、「11月20日」ノードは2つあります。1つは「トレーニング\ 11月20日」で、もう1つは「テスト」です。 11月20日」。
- 編集:SID = 3のすべてのノードについて、時間を最後のノードに追加する必要があります。例:「テスト\2011月20日\15:00オプティカル」
- 編集:menuPathフィールドに含まれる正確な深さは異なる場合があります。
これを実現する次の手続き型SQLクエリを作成できましたが、同等のセットベースのアプローチに変換する方法を知っている人はいますか?
menuPath
このSQLは、列から階層情報を抽出するために作成しました。SID番号に応じて、MarketName
情報とTime
列もこれに追加されます。menuPath
たとえば、SID = 1の場合はのみMarketName
が追加されますが、SID = 3の場合は、Time
とのMarkeName
両方が追加されます。
はノードMarketID
のメニューテーブルにのみ追加されますMarketName
。
テーブルスキーマと私が使用しているデータの例を以下に示します。
tsql - T-SQL で隣接する行を条件付きでマージおよび集約する
特定の期間の売上を表す 10 万行のテーブルがあります。通常、生理は少なくとも数時間続きますが、時折、わずか数分の生理になります。これらの小さな期間は下流のレポートを台無しにするので、前の期間とマージしたいと思います。30 分以下の期間は前の期間とマージされ、販売データが期間全体で合計されます。長い期間の間にゼロ、1 つ、または複数の後続の短い期間がある場合があります。データに時間のギャップはありません。1 つの期間の開始は、前の期間の終了と常に同じです。
このマージを実行するための適切なセットベースの方法 (カーソルなし!) は何ですか?
既存のデータ (簡略化) は次のようになります。
望ましい出力は次のようになります。
残念ながら、私たちはまだ SQL Server 2008 R2 を使用しているため、SQL Server 2012 の優れた新しいウィンドウ関数を利用することはできません。これにより、この問題を効率的に解決しやすくなる可能性があります。
同様の問題について、SQL で隣接する行をマージするのに良い議論がありますか? . 特に PIVOT/UNPIVOT ソリューションが気に入っていますが、それを自分の問題に適応させる方法に困惑しています。