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

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

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

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

Q&A

3回答

221閲覧

SQL 年月、身分ごとの入館者数をSELECTしたい。

退会済みユーザー

退会済みユーザー

総合スコア0

SQL Server

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

0グッド

1クリップ

投稿2019/03/01 06:55

現在、施設の入館者数一覧を表示するSELECT文を考えています。
テーブルは以下の通りとします。

DateTimeOrganNumOrganName
入館時刻身分コード身分名称

1回の入館で1つデータが落ちます。
これを年月、身分ごとでSELECTしたいと思います。

SQL

1SELECT 2 DATEPART(YEAR, DateTime) AS '年', 3 DATEPART(MONTH, DateTime) AS '月', 4 OrganName, 5 OrganNum, 6 COUNT(*) AS '計' 7FROM 8 allLog 9GROUP BY 10 DATEPART(YEAR, DateTime), 11 DATEPART(MONTH, DateTime), 12 OrganName, 13 OrganNum 14ORDER BY 15 '年' ASC, 16 '月' ASC, 17 OrganNum

このSQLで一応実現したいことは可能なのですが、結果が

OrganNameOrganNum
20192教員1117
20192学生3123
20192一般5125

といった具合に表示されてしまいます。
これを

OrganNameOrganNumOrganNameOrganNumOrganNameOrganNum
20192教員1117学生3123一般5125

のように年月で1行として表示させるにはどうしたら良いのでしょうか?
拙い質問ですみません。。よろしくお願いします。

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

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

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

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

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

guest

回答3

0

個人的にはあんまり好きじゃないですが、SQL Serverだと↓のようにPIVOTを使う書き方がいいようです。

SqlServer

1SELECT 2 ... 3FROM ( 4 SELECT 5 DATEPART(YEAR, [DateTime]) AS 年, 6 DATEPART(MONTH, [DateTime]) AS 月, 7 [OrganNum] 8 FROM 9 [allLog] 10 ) A 11PIVOT(...) AS PV 12

なお、今回の出力形式は冗長なので、可能であれば↓のように変えた方が分かりやすいと思います。
|年|月|学生|教員|その他|
|:--|:--:|--:|--:|
|2019|2|17|23|25|

投稿2019/03/01 10:52

wwbQzhMkhhgEmhU

総合スコア343

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

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

0

SQL

1SELECT 2 al1.DATEPART(YEAR, DateTime) AS '年', 3 al1.DATEPART(MONTH, DateTime) AS '月', 4 al1.OrganName, 5 al1.OrganNum, 6 al2.DATEPART(YEAR, DateTime) AS '年', 7 al2.DATEPART(MONTH, DateTime) AS '月', 8 al2.OrganName, 9 al2.OrganNum, 10 al3.DATEPART(YEAR, DateTime) AS '年', 11 al3.DATEPART(MONTH, DateTime) AS '月', 12 al3.OrganName, 13 al3.OrganNum, 14 COUNT(*) AS '計' 15FROM 16 allLog al1 17LEFT JOIN 18allLog al2 19on al2.OrganName ='学生' 20LEFT JOIN 21allLog al3 22on al3.OrganName = '一般' 23WHERE ROWNUM = 1

投稿2019/03/01 07:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

FOR XML PATH を参考に。

投稿2019/03/01 07:12

Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問