フィールドを結合するSQL関数

フィールドを結合するSQL関数

最近、関連テーブル内のすべてのフィールドをクエリし、それらを 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 を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQL で単一のフィールド内の複数の値を分割および結合する方法
  • Mysqlのマージ結果と水平スプライシングフィールドの実装手順
  • MySQL ユニオン マージ クエリ データとテーブル エイリアスおよびフィールド エイリアスの使用状況の分析
  • MySQL の列から行への変換、フィールドの結合方法 (必読)
  • グループ文字マージSQL文は、特定のフィールドで文字列の1つをマージします(単純マージ)
  • SQL Server でフィールド値をマージする例
  • MySQLで2つのフィールドをマージする方法

<<:  ハイパーリンクアイコンの仕様: 記事の読みやすさを向上

>>:  Docker可視化管理ツールであるDocker UIの使用

推薦する

MySQL NULLデータ変換方法(必読)

MySQL を使用してデータベースをクエリし、左結合を実行すると、関連付けられたフィールドの一部に...

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...

垂直グリッドと漸進的な行間隔の例

新しい質問急いで来て、急いで行ってください。 「垂直グリッドとプログレッシブ行間隔 (パート 1)」...

Vue ページ状態の永続化の詳細な説明

目次コード:補充:要約する要件: 左のツリーと右のテーブル。組織ツリーでノードを選択した後、詳細ペー...

MySQL 8.0.3 RCがリリースされようとしています。変更点を見てみましょう。

MySQL 8.0.3がリリースされます。新機能を見てみましょうMySQL 8.0.3 は RC ...

テーブルを作成するための HTML dl、dt、dd タグとテーブル作成テーブル

ウェブサイトの開発とメンテナンスのコストが削減されるだけでなく、コードもよりセマンティックになります...

node-media-serverを使用してシンプルなストリーミングメディアサーバーを構築する

node-media-server を使用するプロセスの一部を記録します。この記事の環境はWindo...

MySQL エラー コード 1862 の解決方法: パスワードの有効期限が切れています

ブロガーは 1 ~ 2 か月間 MySQL を使用していませんでしたが、今日この問題に遭遇しました。...

Windows 64 ビットに MySQL を再インストールするチュートリアル (Zip バージョン、解凍バージョンの MySQL インストール)

MySQLをアンインストールする1. コントロールパネルで、MySQLのすべてのコンポーネントをア...

JavaScript で簡単なモグラ叩きゲームを実装する

この記事では、モグラ叩きゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

Linux CentOS 7.4 で mysql5.7.20 のパスワードを変更する方法

MySQL がバージョン 5.7 にアップグレードされた後、セキュリティが大幅に向上しました。しかし...

CSS はコンテナ レベル (div...) タグを 1 つの位置 (ページの右端) に固定します。

コードは次のようになります。 。プロセス{ 境界線:1px 実線 #B7B7B8; 背景:#F8F8...

設定操作からMySQLへのNULLが見つからない問題を解決する

興味深い発見:合計 1000 件のレコードを含むテーブルがあります。クエリ ステートメントは次のよう...

Vue で AES.js を使用する詳細な手順

AES暗号化の使用データ転送の暗号化と復号化処理 --- AES.js最初のステップ: vue に ...

MySQL自動シャットダウン問題への対処の実践記録

最近、あるプロジェクトを手伝ったのですが、MySQL マシンがしばらくすると自動的に停止し続けました...