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

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

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

3回答

2291閲覧

SQLでNULLではないものだけでカンマ区切りをしたい

del

総合スコア4

SQL Server

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2020/01/29 07:31

##質問
SQL Serverで下記のクエリのような結果になるようにいろいろ試行錯誤をしているのですが、なかなか思いつかないため質問させていただきます。
下記のようなテーブルがあるとしたとき、NULL値のものだけを省いたカンマ区切りのカラムを作りたいです。

ご飯パン
おにぎりNULLメロンパン
牛丼ラーメンNULL
NULLそばクロワッサン

↑のようなテーブルがあるとき、新たなカラムで

ご飯パン総合
おにぎりNULLメロンパンおにぎり,メロンパン
牛丼ラーメンNULL牛丼,ラーメン
NULLそばクロワッサンそば,クロワッサン

新規にカラムを作り、↑のような実行結果にしたいです。

SQL

1SELECT 2 ご飯, 3, 4 パン, 5 ISNULL(ご飯, '') + ' , ' + 6 ISNULL(, '') + ' , ' + 7 ISNULL(パン, '') AS 総合 8FROM 9 テーブル 10WHERE 11 ご飯<> '' OR 12<> '' OR 13 パン <> ''

のようにやってみたのですが、これだとNULL値のところは空文字が入り再現したいこととは異なります。

簡単に言うと、ご飯⇒麺⇒パンの順番で見ていきNULLのデータだったときはそのデータは飛ばしてカンマもつけないで次のデータとくっつけたいです。

わかる方いましたら、ご教授ください。

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

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

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

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

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

guest

回答3

0

未検証です。

SQL

1SELECT ご飯,, パン 2 , ( 3 select STRING_AGG(item, ',') 4 from (values (ご飯),(),(パン)) as list(item) 5 where item is not null 6 ) as 総合 7from テーブル

投稿2020/01/29 08:01

編集2020/01/29 08:07
sazi

総合スコア25195

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

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

0

CASE でWHEN xxx IS NULL THEN ... ELSE ... END
で試されては?

投稿2020/01/29 07:51

Orlofsky

総合スコア16415

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

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

0

こんな感じですかね

SQL

1SELECT 2 ご飯, 3, 4 パン, 5 (CASE WHEN ご飯 is null THEN '' ELSE ご飯 + ',' END 6 + CASE WHENis null THEN '' ELSE+ ',' END 7 + CASE WHEN パン is null THEN '' ELSE パン + ',' END 8 ) AS 総合 9FROM 10 テーブル 11WHERE 12 ご飯<> '' OR 13<> '' OR 14 パン <> ''

投稿2020/01/29 07:46

quzq

総合スコア185

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

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

del

2020/01/29 07:59

CASE文を使えばよかったんですね! ありがとうございます!
Y.H.

2020/01/29 08:20

最後に','が付いちゃいますね。
del

2020/01/29 08:21

カンマを前に持ってくることで解決しました!
sazi

2020/01/29 08:23

前後変えても余分なのは一緒ですよ
Y.H.

2020/01/29 08:24

そうすると最初に','が付きませんか? ご飯 : null '' 麺 : not null ',麺' パン : not null ',パン'
del

2020/01/29 08:32

あ、確かにそうですね。。 実際のデータがご飯のカラムにNULLがなかったので気が付きませんでした。
del

2020/01/29 09:02 編集

なにか対策法はありますでしょうか? 根本的な考え方を変えたほうがよいでしょうか。
Y.H.

2020/01/29 09:07

SQL Server 2017以降であればsaziさんの回答を試してみられては?
sazi

2020/01/29 09:37

','を前につけて、substring(編集した文字列, 2, len(編集した文字列)-1)にする。
sazi

2020/01/29 09:40

若しくは、','を後ろにつけて、left(編集した文字列, len(編集した文字列)-1)にする
del

2020/01/30 00:18

sazi様、すみませんが解説の方も一応お願いしてもよろしいですか? まだ不慣れで理解が遅いもので。。。
sazi

2020/01/30 01:02

SQL Server のバージョンは何でしょうか? 2017以降なら私の回答を試された方が簡潔ですよ。
sazi

2020/01/30 01:05

未解決なら、一旦解決積みを外した方が、他の方からの良いアイデアが回答されるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問