質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
A5:SQL Mk-2

A5:SQL Mk-2は、フリーのSQL開発ツールです。高機能で軽量、且つ分かりやすいことを目指して開発されました。SQLの実行やテーブル編集などの機能に加え、簡単な操作によりDB定義書やER図を自動生成することも可能です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

2回答

1726閲覧

SQL Server カンマ区切りの列データで取得

asmer

総合スコア3

A5:SQL Mk-2

A5:SQL Mk-2は、フリーのSQL開発ツールです。高機能で軽量、且つ分かりやすいことを目指して開発されました。SQLの実行やテーブル編集などの機能に加え、簡単な操作によりDB定義書やER図を自動生成することも可能です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2023/06/27 08:01

実現したいこと

縦に並んだデータを横にカンマ区切りの列データで取得する方法
テーブルA
番号|言語ID
1|001
1 | 002
1 | 003
2 | 004
2 | 005

テーブルB
言語ID | 言語名
001|Java
002 | Javascript
003 | C#
004 | HTML
005 | CSS

上記のような二つのテーブルがあります。

求めている結果は
1| Java,Javascript,C#
2| HTML,CSS
です。

発生している問題・エラーメッセージ

https://webbibouroku.com/Blog/Article/forxmlpath
こちらの記事を参考にしましたが、
1|Java,
1 | Javascript,
1 | C#,
2 | HTML,
2 | CSS,
このように表示されてしまいます。

該当のソースコード

SELECT テーブルA.番号,
(SELECT テーブルB.言語名 + ','
FROM テーブルB
WHERE テーブルA.言語ID = テーブルB.言語ID
FOR XML PATH(''))AS 言語
FROM テーブルA

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asmer

2023/06/27 08:15

GROUPBYを使ってみましたが、エラーがでてしまいました。
guest

回答2

0

ベストアンサー

GPT-4による回答を修正するなら、次のような感じでしょうか。

SQL

1SELECT query1.[番号], 2 STUFF((SELECT ',' + sub2.[言語名] 3 FROM [テーブルA] AS sub1 4 INNER JOIN [テーブルB] AS sub2 5 ON sub1.[言語ID] = sub2.[言語ID] 6 WHERE sub1.[番号] = query1.[番号] 7 FOR XML PATH('')), 1, 1, '') AS [言語] 8FROM (SELECT main1.[番号] 9 FROM [テーブルA] AS main1 10 GROUP BY main1.[番号]) AS query1 11ORDER BY query1.[番号];

投稿2023/06/27 08:55

編集2023/06/27 09:19
sk.exe

総合スコア1070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asmer

2023/06/28 00:51

ありがとうございます。解決しました!
guest

0

この回答はGPT-4による自動生成回答です

以下のように修正してみてください。GROUP BYを使って、番号ごとにグループ化し、STUFF関数を使って余分なカンマを削除します。

sql

1SELECT テーブルA.番号, 2 STUFF((SELECT ',' + テーブルB.言語名 3 FROM テーブルB 4 WHERE テーブルA.言語ID = テーブルB.言語ID 5 FOR XML PATH('')), 1, 1, '') AS 言語 6FROM テーブルA 7GROUP BY テーブルA.番号

このクエリでは、まずテーブルAの番号ごとにグループ化し、その番号に対応する言語名をカンマ区切りで連結します。FOR XML PATH('')を使って言語名を連結し、STUFF関数を使って最初の余分なカンマを削除しています。

投稿2023/06/27 08:01

teratail-ai

Powered by GPT-4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asmer

2023/06/27 08:23

エラーがでてしまって、求めたい結果は得られませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問