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

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

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

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

SQL

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

Q&A

解決済

2回答

8074閲覧

SQL Server で NULLまたは空文字列を group by で集計したい

sznm

総合スコア7

SQL Server

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

SQL

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

0グッド

0クリップ

投稿2019/06/06 00:49

編集2019/11/20 08:40

前提・実現したいこと

以下のような空文字列を含むテーブルを集計して、

列1列2列3
AAABBB(空文字列)
AAA(空文字列)CCC
AAADDDCCC
FFFBBB(空文字列)
FFF(空文字列)CCC
FFF(空文字列)GGG

以下のように表示したいと考えております。

列1列2列3
AAABBBCCC
AAADDDCCC
FFFBBBCCC
FFFBBBGGG

可能であれば、ご教示お願い致します。

試したこと

  • 項目1のみでのgroupbyで集計→SQL Server の場合、文字列を全て指定しないとエラーになる。(今回の場合、項目1のみではなく、項目1、項目2、項目3全て選択しなければならない。)

  • 空文字列をNULLに置換してからgroupbyで集計→NULLがそのまま残る。

追記

更新が遅くなり申し訳ございません。
データ自体に空文字列とNULLが生じなくなりましたので、質問をクローズいたします。

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

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

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

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

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

maisumakun

2019/06/06 00:54

「列1:foo、列2:bar、列3:baz」、「列1:foo、列2:hoge、列3:(空文字列)」のように、NULLや空文字列以外の値が複数存在した場合はどのように処理すればいいでしょうか。
sazi

2019/06/06 01:04

(列1,列2,列3)=(AAA,BBB,),(AAA,,CCC),(AAA,DDD,EEE) のようなデータはなく、 あくまで,列1によるパターンは、1パターンしかないという事でいいですか?
sznm

2019/06/06 03:05 編集

コメントありがとうございます。 表に追記いたしました。 列1は、複数パターン存在します。しかし、NULLまたは空文字列は無い列となっております。 列1、列2、列3に、文字列が入っている場合はそのまま表示させたいと考えております。
sazi

2019/06/06 03:05

追記された内容に、(FFF, DDD,(空文字列))を追加した場合、 結果には(FFF,DDD,CCC)、(FFF,DDD,GGG)も追加されますか?
sznm

2019/06/06 03:07

>追記された内容に、(FFF, DDD,(空文字列))を追加した場合、結果には(FFF,DDD,CCC)、(FFF,DDD,GGG)も追加されますか? →はい。結果に両方とも表示したいと考えております。
hihijiji

2019/06/06 04:18

入力に(AAA,YYY,ZZZ)が追加された場合は、出力には(AAA,YYY,ZZZ)だけが追加されますか?
sznm

2019/06/06 05:18

>入力に(AAA,YYY,ZZZ)が追加された場合は、出力には(AAA,YYY,ZZZ)だけが追加されますか? →はい。そうしたいです。
guest

回答2

0

ベストアンサー

SQL

1 select1,2,3 from テーブル where2 != '' and3 != '' 2union all 3 select t1.1, t1.2, t2.3 4 from (select1,2 from テーブル where3='') t1 5 inner join 6 (select1,3 from テーブル where2='') t2 7 on t1.1=t2.1

データ補正とかの為にやっているんでなければ、そうゆうデータを生まないように見直しが必要だと思います。

投稿2019/06/06 03:26

編集2019/06/06 03:29
sazi

総合スコア25195

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

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

sznm

2019/06/06 07:33

コメントありがとうございます。 実際にクエリを実行いたしましたが、要求と齟齬が生じておりますので、再度検討いたします。
sazi

2019/06/06 07:55

どういったところに「要求と齟齬」(質問内容の見落とし?)が生じていますか?
sznm

2019/06/19 07:35

返事が遅くなり申し訳ありません。 取得したデータを提示したところ、チーム内で要求がまとまっていない状況で、様々な意見が出てしまっています。 現在、チーム内で要求がまとまっていない状況です。
sazi

2019/06/19 07:53 編集

質問が変わる可能性があるという事で、質問内容の見落としでは無いという事ですね。
guest

0

FOR XML PATH('')が使えるかもしれません。

以下どうなる想定でしょうか

AAA (空文字列) AAA (空文字列)
AAA (空文字列) AAA NULL
AAA BBB AAA CCC

投稿2019/06/06 00:59

yambejp

総合スコア114839

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

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

sznm

2019/06/06 03:09

コメントありがとうございます。 列2、列3が両方ともNULLまたは空文字列の場合、NULLまたは空文字列を表示させたいと考えております。 NULLと空文字列が混在する場合、どちらに統一することは可能でしょうか?
yambejp

2019/06/06 03:15

追記されたサンプルを見る限り破綻しそうなロジックですね 1対nの関係で FFF BBB (空文字列) FFF (空文字列) CCC FFF (空文字列) GGG が、 FFF BBB CCC FFF BBB GGG こうまとめられるとなると n対nになるとどうしようもないです FFF BBB (空文字列) FFF XXX (空文字列) FFF (空文字列) CCC FFF (空文字列) GGG 要求定義の時点でまだ煮詰められていないように感じます
sznm

2019/06/06 07:30

コメントありがとうございます。 仰る通り、要求と齟齬が生じておりますので、再度検討いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問