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

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

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

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

SQL

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

SQL Server Reporting Services

SQL Server Reporting Services (SSRS)はMicrosoftが開発したサーバベースのレポートジェネレータです。組織的なレポートの作成、配置、管理に役立てることのできるツールやサービスが豊富に用意されています。

Q&A

解決済

2回答

1525閲覧

インラインビューを使用したデータの表示方法

nyanchu0090

総合スコア2

SQL Server

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

SQL

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

SQL Server Reporting Services

SQL Server Reporting Services (SSRS)はMicrosoftが開発したサーバベースのレポートジェネレータです。組織的なレポートの作成、配置、管理に役立てることのできるツールやサービスが豊富に用意されています。

0グッド

0クリップ

投稿2020/06/29 11:06

下表のようなデータがあるとして、「A」列と「D」列で以下のように絞り込みを行います。
「A」列:1000
「D」列:1A

その場合、通常なら4行目までのデータが表示されると思いますが
絞り込みにより取得された「A」「B」列の値を条件にして、
該当しているものを下表の「※」列記載のように表示させたいと考えています。
本来あれば5、6行目は取得されませんが、
「A」列で取得した「1000」という値が該当しているため表示させたい
ということです。

「※」列は補足として用意したもので、本来はありません。


表1
Table:XYZ
| # | A | B | C | D | ※1
|:--|:--|:--:|--:|--:|絞り込みで表示される
| 1 |1000|201|002|1A|絞り込みで表示される
| 2 |1000|202|001|1A|絞り込みで表示される
| 3 |1000|202|002|1A|絞り込みで表示される
| 4 |1000|203|001|1A|絞り込みで表示される
| 5 |1000|204|001|2A|絞り込みで表示されないが、表示されるようにしたい
| 6 |1000|204|002|2A|絞り込みで表示されないが、表示されるようにしたい
| 7 |1001|205|001|2A|絞り込みで表示されない


インラインビューを使用することで実現できそうだ
というところまでわかっていますが、
そこから先の構築がわからず詰まっています。
どなたかお力添えいただければ幸いです。

何卒宜しくお願い致します。

SQL ,SQL Server ,SQL ,Server Reporting Server

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

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

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

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

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

guest

回答2

0

「A」列:1000
「D」列:1A
この条件で絞り込みをしているとは言えないと個人的には思います。
『「B」列の値を条件にして』の部分は何のことなのかわからないので
書いてある通りの結果を出すならwhereで「D='1A'」を書かないほうがいいと思いますね。
私の中ではwhereは「A=1000」だけですね。Dで絞り込んでいるとは思えない。
D列は値の表示に使っているという認識です。

sql

1with XYZ (#,A,B,C,D) as ( 2 select 1,1000,201,'002','1A' 3 union all select 2,1000,202,'001','1A' 4 union all select 3,1000,202,'002','1A' 5 union all select 4,1000,203,'001','1A' 6 union all select 5,1000,204,'001','2A' 7 union all select 6,1000,204,'002','2A' 8 union all select 7,1001,205,'001','2A' 9) 10select * 11 ,case when D='1A' then '絞り込みで表示される1A' else '絞り込みで表示されないが、表示されるようにしたい1A以外' end as コメント 12from XYZ 13where A=1000 14 15/* 16# A B C D コメント 17----------- ----------- ----------- ---- ---- ------------------------------------------------------ 181 1000 201 002 1A 絞り込みで表示される1A 192 1000 202 001 1A 絞り込みで表示される1A 203 1000 202 002 1A 絞り込みで表示される1A 214 1000 203 001 1A 絞り込みで表示される1A 225 1000 204 001 2A 絞り込みで表示されないが、表示されるようにしたい1A以外 236 1000 204 002 2A 絞り込みで表示されないが、表示されるようにしたい1A以外 24 25(6 rows affected) 26*/

投稿2020/06/29 12:47

sousuke

総合スコア3830

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

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

0

ベストアンサー

レコード 1, 2, 3, 4 と 5, 6 を区別したいのであれば、
質問欄の※列に該当する意味を持つ列を作ってしまうのがよいでしょう:

sql

1SELECT XYZ.#, XYZ.A, XYZ.B, XYZ.C, XYZ.D, INLINE.# AS ※1 2FROM XYZ 3LEFT JOIN ( 4 SELECT # 5 FROM XYZ 6 WHERE A = 1000 AND D = "1A" 7) AS INLINE 8ON XYZ.# = INLINE.# 9WHERE A = 1000 OR D = "1A";

|#|A|B|C|D|※1
---|---
1|1000|201|002|1A|1
2|1000|202|001|1A|2
3|1000|202|002|1A|3
4|1000|203|001|1A|4
5|1000|204|001|2A|NULL
6|1000|204|002|2A|NULL

そして、アプリケーションで ※1 列の値に従って
表示する・しない を切り替えます

考え方

例えば、次のような SQL でレコード 1, 2, 3, 4, 5, 6 が取得できます:

sql

1SELECT A, B, C, D FROM XYZ WHERE A = 1000 OR D = "1A";

また、次のような SQL でレコード 1, 2, 3, 4 のみを取得できます:

sql

1SELECT A, B, C, D FROM XYZ WHERE A = 1000 OR D = "1A";

この 2 つのクエリーをインラインビューで組み合わせます

このとき、たくさんの行を取得する方から、少しの行を取得する方に向かって
LEFT JOIN することに気をつけます

投稿2020/06/29 11:41

編集2020/06/29 11:46
y_shinoda

総合スコア3272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問