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

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

ただいまの
回答率

87.59%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,543

score 7

前提・実現したいこと

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

列1 列2 列3
AAA BBB (空文字列)
AAA (空文字列) CCC
AAA DDD CCC
FFF BBB (空文字列)
FFF (空文字列) CCC
FFF (空文字列) GGG

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

列1 列2 列3
AAA BBB CCC
AAA DDD CCC
FFF BBB CCC
FFF BBB GGG

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

試したこと

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

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

追記

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sznm

    2019/06/06 12:07

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

    キャンセル

  • hihijiji

    2019/06/06 13:18

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

    キャンセル

  • sznm

    2019/06/06 14:18

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

    キャンセル

回答 2

checkベストアンサー

+2

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


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/06 16:33

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

    キャンセル

  • 2019/06/06 16:55

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

    キャンセル

  • 2019/06/19 16:35

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

    キャンセル

  • 2019/06/19 16:52 編集

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/06 12:09

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

    キャンセル

  • 2019/06/06 12: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

    要求定義の時点でまだ煮詰められていないように感じます

    キャンセル

  • 2019/06/06 16:30

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

    キャンセル

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

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る