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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

2591閲覧

datagridview表示 縦型データを横表示

pon108

総合スコア19

SQL Server

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/05/05 23:33

前提・実現したいこと

VisualStudio2017を使用し、月間生産計画が見れるWindowsアプリケーションを作成しております。
表示方法としてdatagridviewを使用して日々の計画が見れるようにしたいと考えております。

表示させるデータはSQLServer2016に保存しており
テーブル内容が下記のようになります。

 ■keikakuテーブル

 ・日付   date
・製品名  nvarchar(50)
・現場   nvarchar(50)
・勤務帯  nvarchar(50)
・生産台数 int

 日付 | 製品名 | 現場 | 勤務帯 | 生産台数
ーーーーーーーーーーーーーーーーーーーーーーー
2019-05-01| A | イ支部 | 一次 | 900
2019-05-01| A | イ支部 | 二次 | 900
2019-05-01| A | イ支部 | 三次 | 900
2019-05-01| B | ロ支部 | 一次 | 900
2019-05-01| B | ロ支部 | 二次 | 900
2019-05-01| B | ロ支部 | 三次 | 900
2019-05-01| C | ハ支部 | 一次 | 900
2019-05-01| C | ハ支部 | 二次 | 900
2019-05-01| C | ハ支部 | 三次 | 900
2019-05-01| C | 二支部 | 一次 | 900
2019-05-01| C | 二支部 | 二次 | 900
2019-05-01| C | ニ支部 | 三次 | 900


このテーブル内容をdatagridviewに表示させるのですが
その際日付を横並びにして下記表のように月の最後まで表示させたいです。
イメージ説明

発生している問題・エラーメッセージ

縦に持っているデータの横表示をどのようにすればよいか分からず、
また月により列数が変化するのでその場合どのように書けば分かりません。

試したこと

リンク内容

上記サイトを頼りに考えてみましたが日付で横並びにする方法がどうしても考えつきません。

補足情報(FW/ツールのバージョンなど)

・VisualStudio2017
・SQLServer2016
・開発言語…VB

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/05/05 23:55

pivot をキーワードに調べてみてはいかがでしょう? ただ、pivot で望む結果が得られたとしても、DataGridView に画像のような形で標示するのは無理っぽいので、そのあたりを先に考えた方が良いかもしれません。
pon108

2019/05/06 00:10

回答ありがとうございます。 PIVOTを調べてみました。 構文を確認したところ列数を指定しないと使用できないみたいなのですが 何か方法が他にあるのでしょうか? 参考にしたサイトは下記になります。 https://www.casleyconsulting.co.jp/blog/engineer/162/ また表示は https://www.atmarkit.co.jp/fdotnet/dotnettips/593dgvgroupedcell/dgvgroupedcell.html こちらを参考にしようと考えております。
退会済みユーザー

退会済みユーザー

2019/05/06 00:34

知っていること (今回の場合は参考にしてるサイト) は最初の質問に書くようお願いします。
guest

回答1

0

ベストアンサー

SQL

1select 2 tmp.製品名 3 ,tmp.現場 4 ,tmp.勤務帯 5 ,sum(case DAY(tmp.日付) when 1 then tmp.生産台数 else null end) as [1日] 6 ,sum(case DAY(tmp.日付) when 2 then tmp.生産台数 else null end) as [2日] 7 ,sum(case DAY(tmp.日付) when 3 then tmp.生産台数 else null end) as [3日] 8 ,sum(case DAY(tmp.日付) when 4 then tmp.生産台数 else null end) as [4日] 9 ,sum(case DAY(tmp.日付) when 5 then tmp.生産台数 else null end) as [5日] 10 from 11 ( 12 select 日付 , 製品名 , 現場 , 勤務帯 , 生産台数 from keikaku 13 ) tmp 14group by 15 tmp.製品名 , tmp.現場 , tmp.勤務帯 16

もしくは

SQL

1select 製品名 , 現場 , 勤務帯 ,[1] ,[2] ,[3] ,[4] ,[5] 2 from 3 (select DAY(日付) AS, 製品名 , 現場 , 勤務帯 , 生産台数 from keikaku) tmp 4 PIVOT ( SUM( 生産台数 ) FORIN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10] 5 ,[11],[12],[13],[14],[15],[16],[17],[18],[19],[20] 6 ,[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31] 7 )) AS p 8ORDER BY 製品名 , 現場 , 勤務帯

このようなSQLで日を横とした結果が得られるかと思います。
ただ、現状のテーブルでは「一次、二次、三次」となりませんので注意してください。
詳しくは「漢数字 ソート」などで検索すればよろしいかと

また、その月の日の増減に関しては、VB側でSQLを構築する形にして必要日分の列とすればよろしいかと思います。

VB.NET

1For i = 1 to その月の最終日 2 SQL &= $",max(case DAY(tmp.日付) when {i} then tmp.生産台数 else null end) as [{StrConv(i.ToString, VbStrConv.Wide)}日]" 3Next

もしくは

VB.NET

1SQL = "select 製品名 , 現場 , 勤務帯" 2For i = 1 to その月の最終日 3 SQL &= $",[{i}]" 4Next 5

このような感じで

投稿2019/05/06 00:49

編集2019/05/06 01:27
YAmaGNZ

総合スコア10242

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

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

pon108

2019/05/06 12:39

回答ありがとうございます。 提示していただきましたコードを参考にさせていただき 思い通りの表示が出来ました。 丁寧に教えていただき本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問