最近、関連テーブル内のすべてのフィールドをクエリし、それらを 1 つのフィールドに再グループ化する必要があります。現時点では、通常の結合クエリではニーズを満たすことができず、それを完了するには SQL 関数が必要です。 ALTER 関数 dbo.getResCodesByOwnerId(@OwnerId INT) nvarchar(2000)を返します。 として 始める @codes VARCHAR(2000) を宣言します @codes='' を設定します @codes=stuff を選択します ((','+residence_code を crm_owner co left join crm_owner_residence cor on co.id=cor.owner_id where co.id=@OwnerId for xml path('')),1,1,'' を選択します) @コードを返す 終わり テスト用に id = 2 のデータを取り、結果を取得します。 (データベース名).getResCodesByOwnerId(fr.owner_id) を room_code として選択します。 t1 fr から左へ、fr.owner_id=frd.owner_id で t2 frd へ結合 結果: 1101010105,11GU002,1101010104 補足: SQL STUFF関数は文字列を連結します 今日、並列処理についての記事を見ました。私も勉強しましたが、なかなか良かったです。 この効果が欲しい。テーブル tb(idint, 値 varchar(10)) を作成します。 tbvalues(1,'aa')に挿入 tbvalues(1,'bb')に挿入 tbvalues(2,'aaa')に挿入 tbvalues(2,'bbb')に挿入 tbvalues(2,'ccc')に挿入 行く /* 内容(パラメータ1、開始インデックス、長さ、パラメータ2) 説明: startIndex から始まる長さの文字を param1 から削除し (SQL は 0 ではなく 1 から始まります)、削除した文字を param2 に置き換えます。 */ SELECT ID、 価値 = 物 ((SELECT ',' + 値 tbからtまで ここで、t .id = tb.id FOR xml path('')), 1, 1, '') tbより GROUP BY ID による それでおしまい。 収集された情報 /* タイトル: フィールドによって結合された文字列の 1 つ (単純な結合) 著者:(18年間の風雨を経て、氷山に雪蓮が咲く) 場所: 広東省深セン 説明: ID フィールドに従って、次のデータを値フィールドにマージします。 ID値 ----- ------ 1aa 1 bb 2 AAA 2 bbb 2 ccc 結果を取得する必要があります: ID値 ------ ----------- 1 単、二 2 aaa、bbb、ccc つまり、IDでグループ化し、値の合計を求める(文字列の追加) */ --1. sql2000では、create table tb(id int, value varchar(10))を解決するためにカスタム関数のみを使用できます。 tb 値に挿入(1, 'aa') tb 値に挿入(1, 'bb') tb値に挿入(2, 'aaa') tb値に挿入(2, 'bbb') tb 値に挿入(2, 'ccc') 行く 関数dbo.f_str(@id varchar(10))を作成するとvarchar(1000)が返されます。 として 始める @str varchar(1000) を宣言します。 id = @id の場合、@str = isnull(@str + ',' , '') + cast(value as varchar) を tb から選択します。 @strを返す 終わり 行く --関数 select id, value = dbo.f_str(id) from tb group by id を呼び出します 関数 dbo.f_str を削除します テーブル tb をドロップ --2. sql2005 でテーブル tb(id int, value varchar(10)) を作成する方法 tb 値に挿入(1, 'aa') tb 値に挿入(1, 'bb') tb値に挿入(2, 'aaa') tb値に挿入(2, 'bbb') tb 値に挿入(2, 'ccc') 行く id を選択し、[値] = stuff((tb t から ',' + [値] を選択、id = tb.id、xml パス (''))、1、1、'') TBから IDでグループ化 テーブル tb をドロップ --3. カーソルを使用してデータをマージする create table tb(id int, value varchar(10)) tb 値に挿入(1, 'aa') tb 値に挿入(1, 'bb') tb値に挿入(2, 'aaa') tb値に挿入(2, 'bbb') tb 値に挿入(2, 'ccc') 行く @t table(id int,value varchar(100))を宣言します--結果セットテーブル変数を定義します--カーソルとマージプロセスを定義します。my_cursorカーソルをローカルに宣言します。 tbからIDと値を選択 @id_old int、@id int、@value varchar(10)、@s varchar(100) を宣言します。 my_cursorを開く my_cursor を @id 、 @value に取得する @id_old = @id、@s='' を選択 @@FETCH_STATUS = 0 の場合 始める @id = @id_old の場合 @s = @s + ',' + cast(@value を varchar として) を選択します。 それ以外 始める @t 値を挿入(@id_old、stuff(@s,1,1,'')) @s = ',' + cast(@value as varchar) を選択し、@id_old = @id 終わり my_cursor を @id 、 @value に取得する 終わり @t 値を挿入(@id_old、stuff(@s,1,1,'')) my_cursorを閉じる my_cursor の割り当てを解除する @t から * を選択 テーブル tb をドロップ 上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
<<: ハイパーリンクアイコンの仕様: 記事の読みやすさを向上
>>: Docker可視化管理ツールであるDocker UIの使用
年、月、週、日グループによる MySQL クエリ1. 学年別検索 SELECT DATE_FORMA...
みなさんこんにちは。今日は、MySQL 8.0.22 のインストールと構成について学習します。注意深...
従来の Linux イメージで作成された ECS クラウド サーバーには、NTP と YUM が設定...
SSH 公開鍵認証は、SSH 認証方式の 1 つです。 SSH パスワードフリーのログインは公開鍵認...
mysqladmin ツールの使用形式は次のとおりです。 mysqladmin [オプション] コ...
目次マッピングとは何かオブジェクトとマップの違いマップの共通メソッド宣言と初期化割り当てセットキー値...
序文最近、仮想マシンを使用して Ubuntu 18.04 をインストールしました。クローン作成後、I...
この記事では、参考までにMySQL 8.0.15のインストールと設定のグラフィックチュートリアルを紹...
動作環境: MAC Docker バージョン: Docker version 17.12.0-ce,...
この記事の例はすべて小さなプログラムで書かれていますが、実装される機能には影響しません。 wxmlル...
1. 参照整合性参照整合性とは、主に外部キー制約を使用した複数のテーブル間の設計を指します。複数テ...
よくある質問easyswoole を初めて使用する場合は、次のような問題に遭遇することがよくあります...
<br />矛盾が生じます。私たちのような小さな工房では、デザインとレイアウトは基本的に...
みなさんこんにちは、今日はウェブフロントエンドのHTMLを見ていたら、inputタグのtype属性が...
序文1. デバウンス: 高頻度イベントがトリガーされた後、関数は n 秒以内に 1 回だけ実行されま...