<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>SQL | 文系出身のSEですが、何か</title>
	<atom:link href="https://loosecarrot.com/category/se%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2/sql/feed/" rel="self" type="application/rss+xml" />
	<link>https://loosecarrot.com</link>
	<description>文系(国際系)出身でSE就職のサラリーマンが プログラミング・海外旅行・語学・健康などに関する情報を発信します</description>
	<lastBuildDate>Fri, 22 Sep 2023 14:15:12 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.8</generator>

<image>
	<url>https://loosecarrot.com/wp-content/uploads/2020/08/cropped-8214a4f1973e7caf419465b3dcc3ffd7-32x32.png</url>
	<title>SQL | 文系出身のSEですが、何か</title>
	<link>https://loosecarrot.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">151273272</site>	<item>
		<title>SQL 列単位で複数の集計をする関数 PARTITION BY</title>
		<link>https://loosecarrot.com/2020/06/02/4214/</link>
					<comments>https://loosecarrot.com/2020/06/02/4214/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Tue, 02 Jun 2020 14:17:21 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[プログラミング独学]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4214</guid>

					<description><![CDATA[<p>最近SQLで知ったのですが、集計を列単位など、複数の単位で行えます。 感動したので、備忘録として残しておきます。 OracleでもSQLServerでも使えます。 サンプルテーブル 例えばこんな在庫テーブルがあるとします</p>
The post <a href="https://loosecarrot.com/2020/06/02/4214/">SQL 列単位で複数の集計をする関数 PARTITION BY</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-4230" src="https://loosecarrot.com/wp-content/uploads/2020/06/94947442a6a2e332fde49be4472a16a5-1.jpg" alt="" width="800" height="400" />
<p>最近SQLで知ったのですが、集計を<span style="color: #ff0000;">列単位</span>など、<span style="color: #ff0000;">複数の単位</span>で行えます。</p>
<p>感動したので、備忘録として残しておきます。</p>
<p><strong>OracleでもSQLServerでも使えます。</strong></p>
<h2>サンプルテーブル</h2>
<p>例えばこんな<strong>在庫テーブル</strong>があるとします。</p>
<table style="width: 85.6496%; height: 330px;" width="687">
<tbody>
<tr style="height: 44px;">
<td style="width: 23.8964%; height: 44px; border-color: #000000; background-color: #adf089;" width="109">ITEM_CODE<br />
(商品コード)</td>
<td style="width: 21.4116%; height: 44px; border-color: #000000; background-color: #adf089;" width="109">COLOR<br />
(色)</td>
<td style="width: 21.202%; height: 44px; border-color: #000000; background-color: #adf089;" width="314">SIZE<br />
(サイズ)</td>
<td style="width: 22.9675%; height: 44px; border-color: #000000; background-color: #adf089;" width="155">STOCK_AMOUNT<br />
(在庫)</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">A10000</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">青</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">S</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">35</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">A10000</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">青</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">M</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">61</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">A10000</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">赤</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">S</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">NULL</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">A10000</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">ホワイト</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">S</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">21</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">A10000</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">ブラック</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">L</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">0</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">B10001</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">青</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">S</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">78</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">B10001</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">赤</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">S</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">NULL</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">B10001</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">赤</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">M</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">0</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">B10001</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">ホワイト</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">S</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">51</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">B10001</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">ホワイト</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">L</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">54</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">C10005</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">赤</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">S</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">22</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">C10005</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">ホワイト</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">S</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">0</td>
</tr>
<tr style="height: 22px;">
<td style="width: 23.8964%; height: 22px; border-color: #000000;">C10005</td>
<td style="width: 21.4116%; height: 22px; border-color: #000000;">ブラック</td>
<td style="width: 21.202%; height: 22px; border-color: #000000;">L</td>
<td style="width: 22.9675%; height: 22px; border-color: #000000;">87</td>
</tr>
</tbody>
</table>
<h2>商品コード単位に在庫を抽出するには？</h2>
<div class="simple-box2">
<p><strong>例題１</strong></p>
<p>在庫テーブルから<span style="color: #ff0000;">商品コード単位</span>に在庫合計を抽出するには？</p>
</div>
<p>簡単です。</p>
<p>SQLはこうなります。</p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
 ITEM_CODE			AS '商品コード'
,SUM(STOCK_AMOUNT)	AS '在庫_商品コード単位'
FROM [在庫]
GROUP BY ITEM_CODE;</pre><p>抽出結果はこうなります。</p>
<table style="width: 47.1299%;" width="240">
<tbody>
<tr>
<td style="width: 17.3716%; border-color: #000000; background-color: #adf089;" width="131">商品コード</td>
<td style="width: 29.4562%; border-color: #000000; background-color: #adf089;" width="109">在庫_商品コード単位</td>
</tr>
<tr>
<td style="width: 17.3716%; border-color: #000000;">A10000</td>
<td style="width: 29.4562%; border-color: #000000;">117</td>
</tr>
<tr>
<td style="width: 17.3716%; border-color: #000000;">B10001</td>
<td style="width: 29.4562%; border-color: #000000;">183</td>
</tr>
<tr>
<td style="width: 17.3716%; border-color: #000000;">C10005</td>
<td style="width: 29.4562%; border-color: #000000;">109</td>
</tr>
</tbody>
</table>
<h2>商品コード×色単位に在庫を抽出するには？</h2>
<div class="simple-box2">
<p><strong>例題２</strong></p>
<p>在庫テーブルから<span style="color: #ff0000;">商品コード×色</span>に在庫合計を抽出するには？</p>
</div>
<p>これも簡単です。</p>
<p>SQLはこうなります。</p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
 ITEM_CODE				AS '商品コード'
,COLOR					AS '色'
,SUM(STOCK_AMOUNT)	AS '在庫_色単位'
FROM [在庫]
GROUP BY ITEM_CODE,COLOR;</pre><p>抽出結果はこうなります。</p>
<table style="width: 67.7939%;" width="349">
<tbody>
<tr>
<td style="width: 18.4057%; border-color: #000000; background-color: #adf089;" width="131">商品コード</td>
<td style="width: 20.145%; border-color: #000000; background-color: #adf089;" width="109">色</td>
<td style="width: 29.4203%; border-color: #000000; background-color: #adf089;" width="109">在庫_色・サイズ単位</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">A10000</td>
<td style="width: 20.145%; border-color: #000000;">ブラック</td>
<td style="width: 29.4203%; border-color: #000000;">0</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">C10005</td>
<td style="width: 20.145%; border-color: #000000;">ブラック</td>
<td style="width: 29.4203%; border-color: #000000;">87</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">A10000</td>
<td style="width: 20.145%; border-color: #000000;">ホワイト</td>
<td style="width: 29.4203%; border-color: #000000;">21</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">B10001</td>
<td style="width: 20.145%; border-color: #000000;">ホワイト</td>
<td style="width: 29.4203%; border-color: #000000;">105</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">C10005</td>
<td style="width: 20.145%; border-color: #000000;">ホワイト</td>
<td style="width: 29.4203%; border-color: #000000;">0</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">A10000</td>
<td style="width: 20.145%; border-color: #000000;">青</td>
<td style="width: 29.4203%; border-color: #000000;">96</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">B10001</td>
<td style="width: 20.145%; border-color: #000000;">青</td>
<td style="width: 29.4203%; border-color: #000000;">78</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">A10000</td>
<td style="width: 20.145%; border-color: #000000;">赤</td>
<td style="width: 29.4203%; border-color: #000000;">NULL</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">B10001</td>
<td style="width: 20.145%; border-color: #000000;">赤</td>
<td style="width: 29.4203%; border-color: #000000;">0</td>
</tr>
<tr>
<td style="width: 18.4057%; border-color: #000000;">C10005</td>
<td style="width: 20.145%; border-color: #000000;">赤</td>
<td style="width: 29.4203%; border-color: #000000;">22</td>
</tr>
</tbody>
</table>
<h2>「商品コード単位」と「商品コード×色単位」の在庫を1つの表に抽出するには？</h2>
<div class="simple-box2">
<p><strong>例題3</strong></p>
<p>「<span style="color: #ff0000;">商品コード単位</span>」の在庫と「<span style="color: #0000ff;">商品コード×色単位</span>」の在庫を<span style="color: #ff0000;">1つの表に抽出</span>するには？</p>
</div>
<p>こんな抽出結果が欲しいときです。</p>
<p>抽出結果イメージ↓↓↓</p>
<table style="width: 96.6767%;" width="446">
<tbody>
<tr>
<td style="width: 20.3927%; border-color: #000000; background-color: #adf089;" width="88">商品コード</td>
<td style="width: 22.3565%; border-color: #000000; background-color: #adf089;" width="98">色</td>
<td style="width: 22.2054%; border-color: #000000; background-color: #adf089;" width="163"><span style="color: #ff0000;">在庫_色単位</span></td>
<td style="width: 31.4199%; border-color: #000000; background-color: #adf089;" width="97"><span style="color: #0000ff;">在庫_商品コード単位</span></td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">A10000</td>
<td style="width: 22.3565%; border-color: #000000;">ブラック</td>
<td style="width: 22.2054%; border-color: #000000;">0</td>
<td style="width: 31.4199%; border-color: #000000;">117</td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">A10000</td>
<td style="width: 22.3565%; border-color: #000000;">ホワイト</td>
<td style="width: 22.2054%; border-color: #000000;">21</td>
<td style="width: 31.4199%; border-color: #000000;">117</td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">A10000</td>
<td style="width: 22.3565%; border-color: #000000;">青</td>
<td style="width: 22.2054%; border-color: #000000;">96</td>
<td style="width: 31.4199%; border-color: #000000;">117</td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">A10000</td>
<td style="width: 22.3565%; border-color: #000000;">赤</td>
<td style="width: 22.2054%; border-color: #000000;">NULL</td>
<td style="width: 31.4199%; border-color: #000000;">117</td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">B10001</td>
<td style="width: 22.3565%; border-color: #000000;">ホワイト</td>
<td style="width: 22.2054%; border-color: #000000;">105</td>
<td style="width: 31.4199%; border-color: #000000;">183</td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">B10001</td>
<td style="width: 22.3565%; border-color: #000000;">青</td>
<td style="width: 22.2054%; border-color: #000000;">78</td>
<td style="width: 31.4199%; border-color: #000000;">183</td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">B10001</td>
<td style="width: 22.3565%; border-color: #000000;">赤</td>
<td style="width: 22.2054%; border-color: #000000;">0</td>
<td style="width: 31.4199%; border-color: #000000;">183</td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">C10005</td>
<td style="width: 22.3565%; border-color: #000000;">ブラック</td>
<td style="width: 22.2054%; border-color: #000000;">87</td>
<td style="width: 31.4199%; border-color: #000000;">109</td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">C10005</td>
<td style="width: 22.3565%; border-color: #000000;">ホワイト</td>
<td style="width: 22.2054%; border-color: #000000;">0</td>
<td style="width: 31.4199%; border-color: #000000;">109</td>
</tr>
<tr>
<td style="width: 20.3927%; border-color: #000000;">C10005</td>
<td style="width: 22.3565%; border-color: #000000;">赤</td>
<td style="width: 22.2054%; border-color: #000000;">22</td>
<td style="width: 31.4199%; border-color: #000000;">109</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>普通にGROUP BYを使うと<span style="color: #ff0000;"><strong>無理です</strong></span>。</p>
<h2>列単位で複数の集計をする関数 PARTITION BY</h2>
<p>列ごとにGROUP BYができればOKですが、普通は1つの抽出結果に対してGROUP BYで集計しますよね。</p>
<p>列単位で集計できるのが<span style="color: #ff0000;">PARTITION BY</span>です。</p>
<p>例題3を抽出するSQLこうなります。</p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT DISTINCT
 ITEM_CODE														AS '商品コード'
,COLOR															AS '色'
,SUM(STOCK_AMOUNT) OVER(PARTITION BY ITEM_CODE,COLOR)	AS '在庫_色単位'
,SUM(STOCK_AMOUNT) OVER(PARTITION BY ITEM_CODE)			AS '在庫_商品コード単位'

FROM [在庫];</pre><p></p>
<h3>簡単に解説</h3>
<p>簡単に解説します。</p>
<p>OVER以降の()の中の書き方が<span style="color: #ff0000;">GROUP BY</span>ではなく、<span class="crayon-i" style="color: #0000ff;">PARTITION </span><span class="crayon-k"><span style="color: #0000ff;">BY</span>に変わります。</span></p>
<p><span class="crayon-k">OVER</span><span class="crayon-sy">(</span><span class="crayon-i">PARTITION</span> <span class="crayon-k">BY</span> <span class="crayon-i">ITEM_CODE</span><span class="crayon-sy">,</span><span class="crayon-i">COLOR</span><span class="crayon-sy">)</span></p>
<p>重複が出てしまうので、DISTINCTで重複削除をしています。</p>
<p>以上です。</p>
<h2>応用 エクセルのCOUNTIFSをSQLで(CASEとSUMを合せる)</h2>
<p>ちょっとやってみたいなと思ったことがあります。</p>
<p>エクセルで<span style="color: #ff0000;">COUNTIFS</span>って関数がありますよね。</p>
<p>これってSQLでできないかな？と思って調べてみました。</p>
<p>すると載っていました。</p>
<p>参考URL：<a href="https://teratail.com/questions/264469">https://teratail.com/questions/264469</a></p>
<p><strong>ということで</strong>、例題4行ってみよう。</p>
<div class="simple-box2">
<p>例題4</p>
<p>以下を抽出するには？</p>
<p>・商品コード単位で在庫が0またはNULLになっている件数</p>
<p>・色単位で在庫が0またはNULLになっている件数</p>
</div>
<p>抽出結果↓↓↓</p>
<table style="width: 102.899%; height: 317px;" width="663">
<tbody>
<tr style="height: 44px;">
<td style="width: 20.5797%; border-color: #000000; background-color: #adf089; height: 44px;" width="131">商品コード</td>
<td style="width: 21.7392%; border-color: #000000; background-color: #adf089; height: 44px;" width="109">色</td>
<td style="width: 29.7101%; border-color: #000000; background-color: #adf089; height: 44px;" width="109">在庫0SKUの数<br />
商品コード単位</td>
<td style="width: 30.8696%; border-color: #000000; background-color: #adf089; height: 44px;" width="314">在庫0SKUの数<br />
色単位</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">A10000</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">ブラック</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">1</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">A10000</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">ホワイト</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">0</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">A10000</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">青</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">0</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">A10000</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">青</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">0</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">A10000</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">赤</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">1</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">B10001</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">ホワイト</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">0</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">B10001</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">ホワイト</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">0</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">B10001</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">青</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">0</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">B10001</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">赤</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">2</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">B10001</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">赤</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">2</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">2</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">C10005</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">ブラック</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">1</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">0</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">C10005</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">ホワイト</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">1</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">1</td>
</tr>
<tr style="height: 21px;">
<td style="width: 20.5797%; border-color: #000000; height: 21px;">C10005</td>
<td style="width: 21.7392%; border-color: #000000; height: 21px;">赤</td>
<td style="width: 29.7101%; border-color: #000000; height: 21px;">1</td>
<td style="width: 30.8696%; border-color: #000000; height: 21px;">0</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>SQLはこんな感じになります。</p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
 ITEM_CODE														AS '商品コード'
,COLOR															AS '色'
,SUM(CASE WHEN STOCK_AMOUNT = 0 THEN 1 
          WHEN STOCK_AMOUNT IS NULL THEN 1 
		  ELSE 0 END ) OVER(PARTITION BY ITEM_CODE)		AS '在庫0SKUの数_商品コード単位'

,SUM(CASE WHEN STOCK_AMOUNT = 0 THEN 1
          WHEN STOCK_AMOUNT IS NULL THEN 1 
          ELSE 0 END ) OVER(PARTITION BY ITEM_CODE,COLOR)AS '在庫0SKUの数_色単位'
		  

FROM [在庫]</pre><p></p>
<h3>簡単に解説</h3>
<p>SUM()の中でCASE文を使って該当すれば1として、</p>
<p>それをどんどん1ずつ増やしていきます。</p>
<p>CASEの中は<span style="color: #ff0000;">在庫数が0または、NULL</span>なら1をカウントするようになっています。</p>
<p>以上です(笑)。</p>
<p>&nbsp;</p>
<p>テラテイルを見ていると、「<strong>case式</strong>が猛威を振るいます。」と書いてありました。</p>
<p>本当に猛威を振るいますね。</p>
<h2>最後に</h2>
<p>PARTITION BYが使いこなせれば、エクセルのMINIFSやMAXIFSなどいろんなエクセル関数が実現できますね。</p>
<div class="concept-box1">
<p>エクセル関数でできる<span style="color: #ff0000;"><strong>あの関数をSQLでしたい</strong></span>と思ったらぜひ皆さんもチャレンジしてみて下さい。</p>
<p>以外とエクセル関数でできれば、SQLに落とし込むことは簡単かもしれません。</p>
</div>
<a href="https://loosecarrot.com/2020/02/22/4007/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/02/9f23b6b28c9028d7cfc1c3a659c41143-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">SQL ヘッダー行と明細(データ)行で項目数が異なるデータを抽出する</span><span class="blog-card-excerpt">

IFファイルを作るときに、ヘッダー行、明細行、明細行...、ヘッダー行、明細行、明細行...のような作りのことがあります。
...</span></div></div></a>The post <a href="https://loosecarrot.com/2020/06/02/4214/">SQL 列単位で複数の集計をする関数 PARTITION BY</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/06/02/4214/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4214</post-id>	</item>
		<item>
		<title>SQL BCPコマンド ストアド/SQLを使ってTSV・CSVを出力</title>
		<link>https://loosecarrot.com/2020/02/23/4033/</link>
					<comments>https://loosecarrot.com/2020/02/23/4033/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 23 Feb 2020 05:18:20 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4033</guid>

					<description><![CDATA[<p>SQLでインターフェースファイルを作るときに、ファイルを出力する必要があります。 Transact-SQLを組んでもいいのですが、結構面倒です。 SQLをバッチコマンドで実行する方法を備忘録として残しておきます。 ヘッダ</p>
The post <a href="https://loosecarrot.com/2020/02/23/4033/">SQL BCPコマンド ストアド/SQLを使ってTSV・CSVを出力</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img decoding="async" class="alignnone size-full wp-image-4039" src="https://loosecarrot.com/wp-content/uploads/2020/02/7e07b1d28193de5d08fd8647004f1bd2-1-1.png" alt="" width="800" height="400" />
<p>SQLでインターフェースファイルを作るときに、ファイルを出力する必要があります。</p>
<p>Transact-SQLを組んでもいいのですが、<span style="color: #ff0000;">結構面倒</span>です。</p>
<p>SQLをバッチコマンドで実行する方法を備忘録として残しておきます。</p>
<p>ヘッダと明細の列数が異なるデータを抽出する記事を書いた時にも思っていました。</p>
<a href="https://loosecarrot.com/2020/02/22/4007/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/02/9f23b6b28c9028d7cfc1c3a659c41143-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">SQL ヘッダー行と明細(データ)行で項目数が異なるデータを抽出する</span><span class="blog-card-excerpt">

IFファイルを作るときに、ヘッダー行、明細行、明細行...、ヘッダー行、明細行、明細行...のような作りのことがあります。
...</span></div></div></a>
<p>デモンストレーションで動かした動画を載せておきます。</p>
<p><div class="video"><iframe title="SQL BCPコマンド ストアドSQLを使ってTSV・CSVを出力" width="500" height="375" src="https://www.youtube.com/embed/6sZzYBeqKow?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></p>
<h2>SQLserverからファイル出力する書き方</h2>
<p>書き方はこんな感じです。</p>
<h3>SQLServer認証の場合</h3>
<p>bcp &#8220;<span style="color: #ff0000;">SQL文 or ストアド名</span>&#8221; queryout &#8220;<span style="color: #ff0000;">出力パス</span>&#8221; -c -t <span style="color: #ff0000;">区切り文字</span> -S <span style="color: #ff0000;">サーバ名 or IP</span> -U sa -P <span style="color: #ff0000;">パスワード</span></p>
<h3>Windows認証の場合</h3>
<p>bcp &#8220;<span style="color: #ff0000;">SQL文 or ストアド名</span>&#8221; queryout &#8220;<span style="color: #ff0000;">出力パス</span>&#8221; -c -t <span style="color: #ff0000;">区切り文字</span> -S <span style="color: #ff0000;">サーバ名 or IP</span> –T</p>
<h2>BCPで出力してみる</h2>
<h3>実行結果</h3>
<p>以下のコマンドをコマンドプロンプトから実行しました。</p><pre class="urvanov-syntax-highlighter-plain-tag">bcp "BuyingReport.dbo.GET_BUYING_HEAD_DETAIL" queryout "C:\Csv\GET_BUYING_HEAD_DETAIL.tsv" -c -t \t -S サーバ名 –T</pre><p></p>
<div class="simple-box1">
<p>サーバ名は自分のSQLSERVER名を入れて下さい</p>
<p>区切り文字は[tab]です。</p>
</div>
<p>実行した結果はこんな感じです。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4036" src="https://loosecarrot.com/wp-content/uploads/2020/02/cebdd49ec954db83a8dac01bd4bf310f.jpg" alt="" width="830" height="490" />
<h3>(補足)ストアドの中身</h3>
<p>dbo.GET_BUYING_HEAD_DETAILは以下のようなデータをSELECTするストアドです。</p>
<a href="https://loosecarrot.com/2020/02/22/4007/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/02/9f23b6b28c9028d7cfc1c3a659c41143-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">SQL ヘッダー行と明細(データ)行で項目数が異なるデータを抽出する</span><span class="blog-card-excerpt">

IFファイルを作るときに、ヘッダー行、明細行、明細行...、ヘッダー行、明細行、明細行...のような作りのことがあります。
...</span></div></div></a>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4024" src="https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549.jpg" alt="" width="1500" height="514" srcset="https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549.jpg 1500w, https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549-300x103.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549-1024x351.jpg 1024w, https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549-768x263.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549.jpg 856w" sizes="(max-width: 1500px) 100vw, 1500px" />
<h2>SQLとバッチの応用</h2>
<p>少し応用編です。</p>
<p>インターフェースファイルとして使うには以下がまだ問題です。</p>
<div class="simple-box3">
<p>・コマンドを毎回打って実行しかできない。</p>
<p>・明細行に不要なタブや区切り文字がある</p>
</div>
<p><strong><span style="color: #ff0000;">ということで、定期実行でも使える処理バッチにしてみました。</span></strong></p>
<p>ファイル名は出力した日時にするようにしています。</p>
<div class="simple-box5">
<p><a href="https://www.dropbox.com/scl/fi/ldmlwm6lahxima8kluh7j/ExportTsvBySQL.zip?rlkey=p5it1ado89qr9567qgougfelw&amp;dl=1" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>可能です。</p>
</div>
<h3>実行結果</h3>
<p>以下のように不要なタブ(区切り文字)も削除することができました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4059" src="https://loosecarrot.com/wp-content/uploads/2020/02/42692d24c4a27f61dc819d3caeb9fee4.jpg" alt="" width="839" height="503" />
<p>ファイル名も出力した日時で出ています。</p>
<p>実行するタイミングはタスクスケジューラで定時実行にすればOKです。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4037" src="https://loosecarrot.com/wp-content/uploads/2020/02/41f70ebeb7f55f893e9bd304158cde00.jpg" alt="" width="862" height="223" srcset="https://loosecarrot.com/wp-content/uploads/2020/02/41f70ebeb7f55f893e9bd304158cde00.jpg 862w, https://loosecarrot.com/wp-content/uploads/2020/02/41f70ebeb7f55f893e9bd304158cde00-300x78.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/02/41f70ebeb7f55f893e9bd304158cde00-768x199.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/02/41f70ebeb7f55f893e9bd304158cde00.jpg 856w" sizes="(max-width: 862px) 100vw, 862px" />
<p>&nbsp;</p>The post <a href="https://loosecarrot.com/2020/02/23/4033/">SQL BCPコマンド ストアド/SQLを使ってTSV・CSVを出力</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/02/23/4033/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4033</post-id>	</item>
		<item>
		<title>SQL ヘッダー行と明細(データ)行で項目数が異なるデータを抽出する</title>
		<link>https://loosecarrot.com/2020/02/22/4007/</link>
					<comments>https://loosecarrot.com/2020/02/22/4007/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Fri, 21 Feb 2020 16:54:38 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4007</guid>

					<description><![CDATA[<p>IFファイルを作るときに、ヘッダー行、明細行、明細行#8230;、ヘッダー行、明細行、明細行#8230;のような作りのことがあります。 こんなファイルですね。 ヘッダ 項目A 項目B 明細 項目C 項目D 明細 項目</p>
The post <a href="https://loosecarrot.com/2020/02/22/4007/">SQL ヘッダー行と明細(データ)行で項目数が異なるデータを抽出する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4009" src="https://loosecarrot.com/wp-content/uploads/2020/02/9f23b6b28c9028d7cfc1c3a659c41143.jpg" alt="" width="800" height="400" />
<p>IFファイルを作るときに、ヘッダー行、明細行、明細行&#8230;、ヘッダー行、明細行、明細行&#8230;のような作りのことがあります。</p>
<p>こんなファイルですね。</p>
<table style="border-collapse: collapse; width: 106.232%; height: 132px;">
<tbody>
<tr style="height: 22px;">
<td style="width: 20%; height: 22px; background-color: #ffff87;"><span style="font-size: 12px;">ヘッダ</span></td>
<td style="width: 20%; height: 22px; background-color: #ffff87;"><span style="font-size: 12px;">項目A</span></td>
<td style="width: 20%; height: 22px; background-color: #ffff87;"><span style="font-size: 12px;">項目B</span></td>
</tr>
<tr style="height: 22px;">
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">明細</span></td>
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">項目C</span></td>
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">項目D</span></td>
</tr>
<tr style="height: 22px;">
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">明細</span></td>
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">項目C</span></td>
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">項目D</span></td>
</tr>
<tr style="height: 22px;">
<td style="width: 20%; height: 22px; background-color: #ffff87;"><span style="font-size: 12px;">ヘッダ</span></td>
<td style="width: 20%; height: 22px; background-color: #ffff87;"><span style="font-size: 12px;">項目A</span></td>
<td style="width: 20%; height: 22px; background-color: #ffff87;"><span style="font-size: 12px;">項目B</span></td>
</tr>
<tr style="height: 22px;">
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">明細</span></td>
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">項目C</span></td>
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">項目D</span></td>
</tr>
<tr style="height: 22px;">
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">明細</span></td>
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">項目C</span></td>
<td style="width: 20%; height: 22px; background-color: #bbfaf3;"><span style="font-size: 12px;">項目D</span></td>
</tr>
</tbody>
</table>
<p>それをSQLで頑張って出せるようにしてみました。</p>
<p>備忘録を兼ねて紹介します。</p>
<p>デモンストレーションで動かした動画を載せておきます。</p>
<p><div class="video"><iframe loading="lazy" title="SQL ヘッダー行と明細(データ)行で項目数が異なるデータを抽出する" width="500" height="281" src="https://www.youtube.com/embed/vCTvuNOSP3w?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></p>
<h2>サンプルの発注・発注明細データ</h2>
<p>扱うテーブルは以下のようなデータです。</p>
<h3>発注テーブル</h3>
<table style="width: 100%;" width="367">
<tbody>
<tr>
<td style="background-color: #b5e2f5; width: 55.0725%;" width="214"><span style="font-size: 12px;">列名(英語)</span></td>
<td style="background-color: #b5e2f5; width: 30.5797%;" width="111"><span style="font-size: 12px;">列名(日本語)</span></td>
<td style="background-color: #b5e2f5; width: 14.058%;" width="42"><span style="font-size: 12px;">備考</span></td>
</tr>
<tr>
<td style="width: 55.0725%;"><span style="font-size: 12px;">BUYING_ID</span></td>
<td style="width: 30.5797%;"><span style="font-size: 12px;">発注ID</span></td>
<td style="width: 14.058%;"><span style="font-size: 12px;">PK</span></td>
</tr>
<tr>
<td style="width: 55.0725%;"><span style="font-size: 12px;">DENPYO_NO</span></td>
<td style="width: 30.5797%;"><span style="font-size: 12px;">伝票NO</span></td>
<td style="width: 14.058%;"></td>
</tr>
<tr>
<td style="width: 55.0725%;"><span style="font-size: 12px;">HACHU_DATE</span></td>
<td style="width: 30.5797%;"><span style="font-size: 12px;">発注日</span></td>
<td style="width: 14.058%;"></td>
</tr>
<tr>
<td style="width: 55.0725%;"><span style="font-size: 12px;">MARCHANT_CD</span></td>
<td style="width: 30.5797%;"><span style="font-size: 12px;">仕入先CD</span></td>
<td style="width: 14.058%;"></td>
</tr>
<tr>
<td style="width: 55.0725%;"><span style="font-size: 12px;">BUYING_COUNT</span></td>
<td style="width: 30.5797%;"><span style="font-size: 12px;">発注合計数</span></td>
<td style="width: 14.058%;"></td>
</tr>
<tr>
<td style="width: 55.0725%;"><span style="font-size: 12px;">ARRIVAL_LOCATION_CD</span></td>
<td style="width: 30.5797%;"><span style="font-size: 12px;">入荷場所CD</span></td>
<td style="width: 14.058%;"></td>
</tr>
<tr>
<td style="width: 55.0725%;"><span style="font-size: 12px;">SHIPMENT_LOCATION_CD</span></td>
<td style="width: 30.5797%;"><span style="font-size: 12px;">出荷場所CD</span></td>
<td style="width: 14.058%;"></td>
</tr>
<tr>
<td style="width: 55.0725%;"><span style="font-size: 12px;">SHIPPING_COMPANY_CD</span></td>
<td style="width: 30.5797%;"><span style="font-size: 12px;">配送会社CD</span></td>
<td style="width: 14.058%;"></td>
</tr>
<tr>
<td style="width: 55.0725%;"><span style="font-size: 12px;">REGISTER_USERCD</span></td>
<td style="width: 30.5797%;"><span style="font-size: 12px;">登録ユーザCD</span></td>
<td style="width: 14.058%;"></td>
</tr>
</tbody>
</table>
<h3>発注明細テーブル</h3>
<table style="width: 100%; height: 184px;" width="367">
<tbody>
<tr style="height: 23px;">
<td style="background-color: #b5e2f5; height: 23px; width: 55.0725%;" width="214"><span style="font-size: 12px;">列名(英語)</span></td>
<td style="background-color: #b5e2f5; height: 23px; width: 30.5797%;" width="111"><span style="font-size: 12px;">列名(日本語)</span></td>
<td style="background-color: #b5e2f5; height: 23px; width: 14.058%;" width="42"><span style="font-size: 12px;">備考</span></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px; width: 55.0725%;"><span style="font-size: 12px;">BUYING_ID</span></td>
<td style="height: 23px; width: 30.5797%;"><span style="font-size: 12px;">発注ID</span></td>
<td style="height: 23px; width: 14.058%;"><span style="font-size: 12px;">PK</span></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px; width: 55.0725%;"><span style="font-size: 12px;">BUYING_DETAIL_ID</span></td>
<td style="height: 23px; width: 30.5797%;"><span style="font-size: 12px;">発注明細ID</span></td>
<td style="height: 23px; width: 14.058%;"><span style="font-size: 12px;">PK</span></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px; width: 55.0725%;"><span style="font-size: 12px;">DENPYO_NO</span></td>
<td style="height: 23px; width: 30.5797%;"><span style="font-size: 12px;">伝票NO</span></td>
<td style="height: 23px; width: 14.058%;"></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px; width: 55.0725%;"><span style="font-size: 12px;">DENPYO_ROW_NO</span></td>
<td style="height: 23px; width: 30.5797%;"><span style="font-size: 12px;">伝票行NO</span></td>
<td style="height: 23px; width: 14.058%;"></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px; width: 55.0725%;"><span style="font-size: 12px;">SKU</span></td>
<td style="height: 23px; width: 30.5797%;"><span style="font-size: 12px;">SKU</span></td>
<td style="height: 23px; width: 14.058%;"></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px; width: 55.0725%;"><span style="font-size: 12px;">PURCHASE_PRICE</span></td>
<td style="height: 23px; width: 30.5797%;"><span style="font-size: 12px;">仕入価格</span></td>
<td style="height: 23px; width: 14.058%;"></td>
</tr>
<tr style="height: 23px;">
<td style="height: 23px; width: 55.0725%;"><span style="font-size: 12px;">BUYING_DEATIL_COUNT</span></td>
<td style="height: 23px; width: 30.5797%;"><span style="font-size: 12px;">発注明細数</span></td>
<td style="height: 23px; width: 14.058%;"></td>
</tr>
</tbody>
</table>
<h2>サンプルSQL</h2>
<p>サンプルのSQLを見ていきましょう。</p>
<p>SQLの解説は下の方でします。</p>
<div class="concept-box6">
<p>テストデータを作るのが手間だと思います。</p>
<p>なので、テーブル作成からデータ登録までできるSQLを準備しました。</p>
<p><a href="https://www.dropbox.com/scl/fi/gaxcx31hxf6g3vx93zgbj/SQL.zip?rlkey=0lcj5mg0k6jwm2a5mln658am4&amp;dl=1" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>可能です。</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT 
 A.COL1									'ヘッダ/明細区分'
,A.COL2									'発注ID/発注ID'
,A.COL3									'伝票番号/発注明細CD'
,A.COL4									'発注日/伝票番号'
,A.COL5									'仕入先CD/伝票行番号'
,A.COL6									'合計発注数/SKU'
,A.COL7									'入荷倉庫CD/仕入価格（税抜）'
,A.COL8									'入荷倉庫名称/発注明細数'
,A.COL9									'出荷倉庫CD/'
,A.COL10								'出荷倉庫名称/'
,A.COL11								'運送会社CD/'
,A.COL12								'運送会社名称/'
,A.COL13								'登録ユーザCD/'
FROM
(
	SELECT
	 '01'													AS	'COL1'
	,CONVERT(VARCHAR(50),BUYING.BUYING_ID)					AS	'COL2'
	,CONVERT(VARCHAR(50),BUYING.DENPYO_NO)					AS	'COL3'
	,CONVERT(VARCHAR(50),BUYING.HACHU_DATE)					AS	'COL4'
	,CONVERT(VARCHAR(50),BUYING.MARCHANT_CD)				AS	'COL5'
	,CONVERT(VARCHAR(50),BUYING.BUYING_COUNT)				AS	'COL6'
	,CONVERT(VARCHAR(50),ARRIVAL_LOCATION_CD)				AS	'COL7'
	,CONVERT(VARCHAR(50),ARRIVAL_LOCATION_NAME)				AS	'COL8'
	,CONVERT(VARCHAR(50),SHIPMENT_LOCATION_CD)				AS	'COL9'
	,CONVERT(VARCHAR(50),SHIPMENT_LOCATION_NAME)			AS	'COL10'
	,CONVERT(VARCHAR(50),SHIPPING_COMPANY_CD)				AS	'COL11'
	,CONVERT(VARCHAR(50),SHIPPING_COMPANY_NAME)				AS	'COL12'
	,CONVERT(VARCHAR(50),REGISTER_USERCD)					AS	'COL13'
	FROM BUYING
	
	UNION
	
	SELECT
	 '02'													AS	'COL1'
	,CONVERT(VARCHAR(50),BUYING_DETAIL.BUYING_ID)			AS	'COL2'
	,CONVERT(VARCHAR(50),BUYING_DETAIL.BUYING_DETAIL_ID)	AS	'COL3'
	,CONVERT(VARCHAR(50),BUYING_DETAIL.DENPYO_NO)			AS	'COL4'
	,CONVERT(VARCHAR(50),BUYING_DETAIL.DENPYO_ROW_NO)		AS	'COL5'
	,CONVERT(VARCHAR(50),BUYING_DETAIL.SKU)					AS	'COL6'
	,CONVERT(VARCHAR(50),BUYING_DETAIL.PURCHASE_PRICE)		AS	'COL7'
	,CONVERT(VARCHAR(50),BUYING_DETAIL.BUYING_DEATIL_COUNT)	AS	'COL8'
	,NULL													AS	'COL9'
	,NULL													AS	'COL10'
	,NULL													AS	'COL11'
	,NULL													AS	'COL12'
	,NULL													AS	'COL13'
	FROM BUYING_DETAIL
) A
ORDER BY 
	 A.COL2
	,A.COL1</pre><p></p>
<h3>抽出結果</h3>
<p>ちょっと見づらいですが、ヘッダー行と明細行で順番に抽出できています。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4057" src="https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549-1.jpg" alt="" width="1504" height="690" srcset="https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549-1.jpg 1504w, https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549-1-300x138.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549-1-1024x470.jpg 1024w, https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549-1-768x352.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/02/75b54500f71fb8c6cc053750031c3549-1.jpg 856w" sizes="(max-width: 1504px) 100vw, 1504px" />
<h2>ヘッダーと明細行を1SQLにする考え方</h2>
<p>どんなふうにヘッダー行と明細行を出していくかを書いておきます。</p>
<div class="concept-box1">
<p>考え方としては以下の2ステップです。</p>
<p><span style="color: #ff0000;">①列数が違うテーブルをとりあえず一つのテーブルにする</span></p>
<p><span style="color: #ff0000;">②順番をヘッダー、明細、項目でソート</span></p>
</div>
<h3>①列数が違うテーブルを一つのテーブルにする</h3>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4026" src="https://loosecarrot.com/wp-content/uploads/2020/02/d78d103669bbf389a2fd356ef27e95b3.jpg" alt="" width="800" height="400" />
<p>そもそも列数が違うテーブルを1つの抽出結果にすることは<span style="color: #ff0000;"><b>難しい</b></span>です。</p>
<p>なので、ひとまず、以下のように<strong><span style="color: #ff0000;">1つの抽出結果</span></strong>にします。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4027" src="https://loosecarrot.com/wp-content/uploads/2020/02/ff068ad9cd766349f06969a08cc5c87a.jpg" alt="" width="800" height="400" />
<h3>②順番をヘッダー、明細、項目でソート</h3>
<p>一つにできれば、何となく形が見えてきますよね。</p>
<p>後は順番をヘッダー、明細、ヘッダー、明細と並べ替えるだけです。</p>
<p>並べ替えるとこんな感じになります。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4028" src="https://loosecarrot.com/wp-content/uploads/2020/02/3a272a99d2836e385e34fcd19a866f24.jpg" alt="" width="800" height="400" />
<h2>SQLの解説</h2>
<p>考え方の①と②に当てはめて解説していきます。</p>
<h3>①列数が違うテーブルを一つのテーブルにする</h3>
<p>18行目～49行目で発注と発注明細のテーブルを1つの抽出結果にしています。</p>
<h4>UNIONでヘッダと明細を合せる</h4>
<p><span style="color: #ff0000;">UNION</span>を使って1つの抽出結果にします。</p>
<p>ただし、<strong>発注明細の方が列数が少ないので、NULLを取得して列数を合せて抽出</strong>をしています。</p>
<h4>UNION後の列の型を変換</h4>
<p>そのままでは、ヘッダと明細で列の型が異なる値が入るため、エラーが出ます。</p>
<p>例えば、8列目です。</p>
<div class="simple-box1">
<p>ヘッダーのARRIVAL_LOCATION_NAMEは<strong>文字型</strong></p>
<p>明細のBUYING_DEATIL_COUNTは<strong>数値型</strong></p>
<p><span style="color: #ff0000;">UNIONするとエラー</span>になります。</p>
<p>そのため、<strong><span class="crayon-k">CONVERT</span><span class="crayon-sy">(</span><span class="crayon-k">VARCHAR</span><span class="crayon-sy">(</span><span class="crayon-cn">50</span></strong><span class="crayon-sy"><strong>),列名)</strong>を使って、<span style="color: #ff0000;">型を合せる</span>ようにします。</span></p>
</div>
<h4>ヘッダと明細区分を付ける</h4>
<p>発注はヘッダ、発注明細は明細行なので、抽出するときに01と02で区分を付与しています。</p>
<p><strong>この次にORDER BYでソートするために使います。</strong></p>
<h3>②順番をヘッダー、明細、項目でソート</h3>
<p>17行目～49行目で元データは作成できました。</p>
<p>なので、その<span style="color: #ff0000;">テーブルをAとして抽出</span>をしています。</p>
<p>この時、データの順番はそのままではだめなので、</p>
<p>[ヘッダ/明細]、[発注ID]、[発注明細ID]の順にORDER BYで<span style="color: #ff0000;">ソート</span>しています。</p>
<div class="concept-box1">
<p>ソート時はUNIONするテーブルの二つの同じ<span style="color: #ff0000;">項目(列)</span>がないとダメです。</p>
</div>
<p><strong>COL1</strong>の18行目と36行目は<span style="color: #ff0000;">同じ項目(列)</span>の「ヘッダ/明細区分」です。</p>
<p><strong>COL2</strong>の19行目と37行目も同じ項目(列)の「発注ID」です。</p>
<p><span style="color: #0000ff;">例えば、仮にCOL2が「発注ID」と「伝票番号」だとソートしたら、数値が若い順に並んでしまいます。</span></p>
<p>&nbsp;</p>
<p>IFファイルとして出力する方法も書いているので良ければみて下さい。</p>
<a href="https://loosecarrot.com/2020/02/23/4033/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/02/7e07b1d28193de5d08fd8647004f1bd2-1-1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">SQL BCPコマンド ストアド/SQLを使ってTSV・CSVを出力</span><span class="blog-card-excerpt">

SQLでインターフェースファイルを作るときに、ファイルを出力する必要があります。

Transact-SQLを組んでもいいの...</span></div></div></a>The post <a href="https://loosecarrot.com/2020/02/22/4007/">SQL ヘッダー行と明細(データ)行で項目数が異なるデータを抽出する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/02/22/4007/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4007</post-id>	</item>
		<item>
		<title>RecordSetにテーブルのデータを取得する</title>
		<link>https://loosecarrot.com/2018/11/22/1481/</link>
					<comments>https://loosecarrot.com/2018/11/22/1481/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Wed, 21 Nov 2018 15:01:45 +0000</pubDate>
				<category><![CDATA[SE(システムエンジニア)]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[Access]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1481</guid>

					<description><![CDATA[<p>C#やVB.netを経験してからVBAを扱うと、DataTableってVBAにはないの？と思ってしまいますよね。 DataTableではなく、RecordSetを使うことで同じような感じで処理ができます。 使い方の備忘録</p>
The post <a href="https://loosecarrot.com/2018/11/22/1481/">RecordSetにテーブルのデータを取得する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>C#やVB.netを経験してからVBAを扱うと、<span style="color: #ff0000;">DataTableってVBAにはないの？</span>と思ってしまいますよね。</p>
<p>DataTableではなく、RecordSetを使うことで同じような感じで処理ができます。</p>
<p>使い方の備忘録として残しておきます。</p>
<h2>テーブルをRecordSetに取得するコード</h2>
<p>&nbsp;</p>
<p>処理としては以下の<span style="color: #ff0000;">抜粋</span>から紹介します。</p>
<div class="simple-box3">
<p>①テーブルからデータをSELECT<br />
②RecordSetへ結果を取得<br />
③csv、tsvに出力</p>
</div>
<a href="https://loosecarrot.com/2018/11/20/1459/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/11/database_p-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">RecordSetからcsv、tsvファイルを出力する</span><span class="blog-card-excerpt">Accessのテーブルからtsvファイルを出力しようとしたところ、意外と簡単に出す方法がありませんでした。

備忘録のために残してお...</span></div></div></a>
<p>作成したAccessファイルは<a href="https://base-shop.loosecarrot.com/items/17677369" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<h3>テーブルをRecordSetに取得する書き方</h3>
<p>以下のような書き方です。</p>
<p><strong>※</strong>RecordSetにSELECT結果を格納しているのは<span style="color: #ff0000;"><strong>13行目</strong></span>です。</p><pre class="urvanov-syntax-highlighter-plain-tag">'=============================================='
'処理　　　 ：csv出力ボタン押下時'
'=============================================='
Private Sub ExportCsv_Click()
　　
　　Dim db As DAO.Database　　　　　　　　　　　　　　　　　　'DBの変数
　　Dim RS_Supplier As DAO.Recordset　　　　　　　　　　　　'レコードセット
　　
　　'DBをセット
　　Set db = CurrentDb
　　
　　'レコードセットへテーブルのデータを取得
　　Set RS_Supplier = db.OpenRecordset(GetSupplier())
　　
　　'レコードセットをファイル出力
　　Call ExportRecordSet(",", RS_Supplier)
　　
End Sub</pre><p></p>
<h3>GetSupplier()の中身</h3>
<p>SELECT文をGetSupplier()で作成しています。</p>
<p>SQLの知識が必要なので、<a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798118818/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">ゼロからはじめるデータベース操作</a>がおすすめです。</p><pre class="urvanov-syntax-highlighter-plain-tag">'=============================================='
'目的:　　　　Supplierテーブルからすべてを取得'
'引数：'
'戻り値:　　　SQL文'
'=============================================='
Public Function GetSupplier() As String
　　Dim SB As StringBuilder

　　'インスタンス化'
　　Set SB = New StringBuilder

　　SB.Clear

　　SB.AppendLine ("SELECT")
　　SB.AppendLine (" * ")
　　SB.AppendLine ("FROM Supplier")

　　GetSupplier = SB.GetString()
　　
End Function</pre><p>&nbsp;</p>
<a href="https://loosecarrot.com/2018/12/09/1800/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/302908301226fed6a1fb99c29d1a0594-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">VBA C# オススメ参考書</span><span class="blog-card-excerpt">プログラミングの参考書でオススメの紹介をしていきます。

それぞれ私が使っている言語のみです。

VBAのオススメ参考書をExc...</span></div></div></a>
<p>StringBuilderについては次で解説しています。</p>
<h2>StringBuilderクラス</h2>
<p>&nbsp;</p>
<p>StringBuilderもC#やVB.netには既存であるクラスなのですが、VBAにはありません。</p>
<p>なので簡単に作ってあります。</p>
<p>一つ作っておくと1つのAccessアプリでは使いまわせるので便利です。</p><pre class="urvanov-syntax-highlighter-plain-tag">'===================================================================='
' StringBuilderクラス'
'--------------------------------------------------------------------'
' create: 2018/02/20'
' update: 2018/02/20'
'===================================================================='
Option Compare Database

'========================================================='
' メンバ宣言'
'========================================================='
' 成形文字列'
Private strString As String

' 改行コード'
Private RTN_CODE As String

'========================================================='
' コンストラクタ'
'========================================================='
Private Sub Class_Initialize()

　　' 初期化'
　　strString = ""
　　RTN_CODE = Chr(13) &amp; Chr(10)

End Sub

'========================================================='
' 成形した文字列を空文字にする'
'========================================================='
Public Sub Clear()

　　strString = ""

End Sub

'========================================================='
' 成形した文字列を取得する'
'---------------------------------------------------------'
' return　　　　　　　　　　成形した文字列'
'========================================================='
Public Function GetString()

　　GetString = strString

End Function

'========================================================='
' 文字列を追加'
'---------------------------------------------------------'
' param strAdd　　　　　　　追加する文字列'
'========================================================='
Public Sub Append(ByVal strAdd)

　　strString = strString &amp; strAdd

End Sub

'========================================================='
' 文字列を追加'
'---------------------------------------------------------'
' param strAdd　　　　　　　追加する文字列'
'========================================================='
Public Sub AppendLine(ByVal strAdd)

　　Append (strAdd &amp; RTN_CODE)

End Sub</pre><p>&nbsp;</p>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<div class="concept-box5">
<p>・【Excel VBA】コピペ用：簡易StringBuilder<br />
<a href="https://qiita.com/OneK/items/4f8ecdb33eac7bc840b5">https://qiita.com/OneK/items/4f8ecdb33eac7bc840b5</a></p>
</div>
<div class="innerlink-box1">
<div class="innerlink-box1-title"><i class="jic jin-ifont-post"></i> おすすめ参考書</div>
<p>■Excelマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774170038/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">てっとり早く確実にマスターできる Excel VBAの教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798145009/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4822236277/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">残業しらずのExcel術 関数＆VBAでビジネスを加速</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774180874/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p>■Accessマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4865102930/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">よくわかる Microsoft Access 2016 基礎</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798041335/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessのデータベースのツボとコツがわかる本2013対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798051438/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">AccessVBA逆引き大全 600の極意 2007~2016対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4883378888/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessマクロ &amp; VBA 開発工房</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798118818/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">CD付 SQL ゼロからはじめるデータベース操作</a></p>
</div>The post <a href="https://loosecarrot.com/2018/11/22/1481/">RecordSetにテーブルのデータを取得する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/11/22/1481/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1481</post-id>	</item>
		<item>
		<title>AndroidSudio MySqlでランダムにデータを取得する</title>
		<link>https://loosecarrot.com/2018/09/14/237/</link>
					<comments>https://loosecarrot.com/2018/09/14/237/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Thu, 13 Sep 2018 22:27:13 +0000</pubDate>
				<category><![CDATA[Java/AndroidStudio]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">http://loosecarrot.com/?p=237</guid>

					<description><![CDATA[<p>疑似ドキドキ郵便箱を自作しながらAndroidStudio、Javaのプログラムを勉強中です。 その中でランダムな相手にメッセージを送信するという機能を作る必要が出てきました。 MySQLではかなり容易にS</p>
The post <a href="https://loosecarrot.com/2018/09/14/237/">AndroidSudio MySqlでランダムにデータを取得する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p>疑似ドキドキ郵便箱を自作しながらAndroidStudio、Javaのプログラムを勉強中です。</p>
<p>その中でランダムな相手にメッセージを送信するという機能を作る必要が出てきました。</p>
<p>MySQLではかなり容易にSQLでクエリを作ることができたので、備忘録として残しておきます。</p>
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">処理の流れ</h2>
<p>処理は大きく分けると以下の2つです。</p>
<p>①ランダムにユーザコードを取得</p>
<p>②上記で取得したユーザコードに対してメッセージを送信(登録)</p>
<img loading="lazy" decoding="async" src="https://www13.a8.net/0.gif?a8mat=2ZPDEC+6JROC2+348+1TXBTD" alt="" width="1" height="1" border="0" />
<hr />
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">①ランダムにユーザコードを取得</h2>
<p>使ったクエリは以下の通りです。</p>
<p>&#8220;ORDER BY RAND() LIMIT 1&#8243;でランダムに1レコードをSELECTできます。</p><pre class="urvanov-syntax-highlighter-plain-tag">/**
* ランダムでユーザコードを取得する
*/
private String getUserCdRandom() throws Exception
{
　　　　strQuery = "SELECT MU_USER_CD AS 'ユーザーコード'" +
　　　　　　　　"FROM m_user " +
　　　　　　　　"ORDER BY RAND() LIMIT 1;";

　　　　//JDBCドライバのロード
　　　　Class.forName("com.mysql.jdbc.Driver");

　　　　//DB接続
　　　　conn = DriverManager.getConnection(strUrl, strUser, strPassword);
　　　　Statement stmt = conn.createStatement();

　　　　rSet = stmt.executeQuery(strQuery);

　　　　while(rSet.next())
　　　　{
　　　　　　　　//DBからデータを取得
　　　　　　　　strUserCd = rSet.getString(strColUserCd);
　　　　}

　　　　rSet.close();
　　　　stmt.close();
　　　　conn.close();

　　　　conn = null;

　　　　return strUserCd;
}</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<hr />
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">②取得したユーザコードに対してメッセージを送信(登録)</h2>
<p>Android StudioでのMySQL DBへの登録(Insert)の処理は初期の設定にかなり手こずるところかと思います。</p>
<p>こちらをみていただければ、Android StudioでのMySQL DBへの登録(Insert)方法が分かると思います。</p>
<p><a href="https://loosecarrot.com/2018/09/15/220/">android　メッセージアプリ 自作④ 非同期処理(MySqlローカル接続エラー原因調査 2)</a></p>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<div class="concept-box5">
<p>・MySQLでランダムにレコードを取得する場合の手法</p>
<p><a href="https://qiita.com/iri/items/b82795b6a3c0a8df62a5">https://qiita.com/iri/items/b82795b6a3c0a8df62a5</a></p>
</div>The post <a href="https://loosecarrot.com/2018/09/14/237/">AndroidSudio MySqlでランダムにデータを取得する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/09/14/237/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">237</post-id>	</item>
		<item>
		<title>android MySql接続 非同期処理(MySqlローカル接続エラー原因調査 2)</title>
		<link>https://loosecarrot.com/2018/09/13/220/</link>
					<comments>https://loosecarrot.com/2018/09/13/220/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Wed, 12 Sep 2018 23:01:21 +0000</pubDate>
				<category><![CDATA[Java/AndroidStudio]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">http://loosecarrot.com/?p=220</guid>

					<description><![CDATA[<p>以前にMySqlへデータを登録するプログラムを記述し、失敗していたので、 その原因を調べました。 以前のエラーの直接の原因は接続先のURLの間違いだったようです。 また、後付けになってしまいましたが、非同期処理で行わなけ</p>
The post <a href="https://loosecarrot.com/2018/09/13/220/">android MySql接続 非同期処理(MySqlローカル接続エラー原因調査 2)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>以前にMySqlへデータを登録するプログラムを記述し、失敗していたので、</p>
<p>その原因を調べました。</p>
<a href="https://loosecarrot.com/wp-content/uploads/2018/09/php-mysql-rest-api-for-android-thumbnail2.png"><img loading="lazy" decoding="async" class="alignnone wp-image-223" src="https://loosecarrot.com/wp-content/uploads/2018/09/php-mysql-rest-api-for-android-thumbnail2.png" alt="" width="431" height="159" /></a>
<p>以前のエラーの直接の原因は接続先のURLの間違いだったようです。</p>
<p>また、後付けになってしまいましたが、非同期処理で行わなければならないようです。</p>
<p>まとめるとこの2点に注意が必要です。</p>
<p><span style="color: #ff0000;">①非同期処理</span></p>
<p><span style="color: #ff0000;">②接続先のURL</span></p>
<p>それぞれ説明していきます。</p>
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">①非同期処理について</h2>
<p>非同期処理を行う理由は</p>
<blockquote style="border: 1px dotted #999; background: #eee; padding: 10px; margin: 10px; display: block;"><p>UIスレッドでネットワーク通信が許可されてないから</p></blockquote>
<p>のようです。</p>
<p>(AndroidでSocket通信より)</p>
<p>非同期処理を行うにはAsyncTaskクラス使います。</p>
<p>ソースを見るほうがわかりやすいかもしれませんので、載せておきます。</p>
<p>すごく雑な解説なので、下のほうに載せている<span style="color: #0000ff;"><strong>参考URL</strong></span>からみていただければと思います。</p>
<p>画面側からAsyncTaskを呼び出してデータを登録します。</p><pre class="urvanov-syntax-highlighter-plain-tag">((Button)　findViewById(R.id.btnSend)).setOnClickListener(new View.OnClickListener()
{
　　@Override
　　public void onClick(View v)
　　{
　　//メール本文取得
　　String message = ((EditText)findViewById(R.id.editTextMsg)).getText().toString();
　　
　　//DB登録処理
　　executeNonQuery extNonQuery = new executeNonQuery(SendMessage.this, message);
　　extNonQuery.execute();
　　}
});</pre><p>&nbsp;</p>
<p>execute()で下に記述した処理が動きます。</p><pre class="urvanov-syntax-highlighter-plain-tag">public class executeNonQueryextends AsyncTask
{
　　private String strUrl = "jdbc:mysql://10.0.2.2:3306/wgm"; //MySQL接続先
　　private String strUser = "root"; //MySQLユーザ
　　private String strPassword = "TEST"; //MySQLパスワード
　　
　　String strQuery = ""; //SQL文格納用
　　private Activity threadActivity = null; //スレッド処理用のアクティビティ
　　private String message = ""; //アクティビティからの送信メッセージ
　　private Exception exception = null; //Exception格納用

　　//　コンストラクタ
　　publicexecuteNonQuery(Activity mainActivity, String strMessage)
　　{
　　　　threadActivity = mainActivity;
　　　　message = strMessage;
　　}

　　/**
　　*　バックグランドで行う処理
　　*　第一引数(Params)で受け取った引数を実行する処理を記載する
　　*　第三引数(Result)で使用する型をReturnする
　　*/
　　@Override
　　protected Exception doInBackground(Void...params)
　　{
　　　　Connection conn = null;
　　　　
　　　　strQuery = "INSERT　INTO　・・・以下省略"
　　
　　　　try
　　　　{
　　　　　　//JDBCドライバのロード
　　　　　　Class.forName("com.mysql.jdbc.Driver");
　　　　　　
　　　　　　//DB接続
　　　　　　conn = DriverManager.getConnection(strUrl, strUser, strPassword);
　　　　　　Statement stmt = conn.createStatement();
　　　　　　
　　　　　　conn.setAutoCommit(false);
　　　　　　
　　　　　　//DBへInsertクエリを実行
　　　　　　stmt.executeUpdate(strQuery);
　　　　　　conn.commit();
　　　　　　stmt.close();
　　　　　　conn.close();
　　　　}
　　　　catch (Exception e)
　　　　{
　　　　　　//エラー内容を書き込む
　　　　　　System.out.println("MySQLに接続できませんでした。" + message.toString() + e.toString());
　　　　　　//Exceptionをセット
　　　　　　exception = e;
　　　　}
　　
　　　　return exception;
　　}

　　@Override
　　protected void onProgressUpdate(Void...values)
　　{
　　　　super.onProgressUpdate(values);
　　}

　　/**
　　*doInBackgroundで返した引数をMainActivity側へ反映させる
　　*/
　　protected void onPostExecute(Exception e)
　　{
　　　　//メッセージ表示用のインスタンス生成
　　　　AlertDialog.Builder builder = new AlertDialog.Builder(threadActivity);
　　
　　　　//Exception有無に応じてメッセージをセット
　　　　if (exception != null)
　　　　{
　　　　　　builder.setMessage(exception.toString());
　　　　}
　　　　else
　　　　{
　　　　　　builder.setMessage("メッセージが送信されました");
　　　　}

　　//メッセージ表示
　　builder.show();

　　}
}</pre><p></p>
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">②接続先のURLについて</h2>
<p>上に書いたソースにはすでに載っているのですが、ローカルホストのMySql接続を行う場合は、</p>
<p>接続URLは<span style="color: #0000ff;">jdbc:mysql://10.0.2.2:3306/[DB名]と記述します。</p>
<p>某ブログなどで調べていると、こんな書き方になっていますが、ダメみたいです。(昔はできてたのか&#8230;?)</p>
<p>jdbc:mysql://localhost:3306/[DB名]</p>
<p>こちらの書き方でMySqlへ接続できない理由は</p>
<blockquote style="border: 1px dotted #999; background: #eee; padding: 10px; margin: 10px; display: block;"><p>AVDから見たlocalhostはAVD自身になるそうです。<br />
その代わりにローカルPCには、10.0.2.2　というIPが割り当てられているようです。</p></blockquote>
<p>(androidエミュレータからlocalhostへの接続より)</p>
<p>なるほど。</p>
<p>AVDからAVDに接続してはおかしなことになってしまいますね。</p>
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">SQL実行(メッセージ送信実行)</h2>
<div></div>
<div><strong>DB(登録前)は空です。</strong></div>
<div><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-228" src="https://loosecarrot.com/wp-content/uploads/2018/09/d8adff9f44c2b7656e28528b7514eee0-300x145.png" alt="" width="300" height="145" /></div>
<div><strong>メッセージを入力し、送信ボタンをクリック</strong></div>
<div><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-227" src="https://loosecarrot.com/wp-content/uploads/2018/09/6b688b7b1ce54f6c5a73c958fad6714b-171x300.png" alt="" width="171" height="300" /></div>
<div><strong>送信ボタンクリック後、送信が完了しました。</strong></div>
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-229" src="https://loosecarrot.com/wp-content/uploads/2018/09/22b870dfab5e5b3c0ba534c5f5bda459-163x300.png" alt="" width="163" height="300" />
<div></div>
<div><strong>メッセージ送信後、DBに登録されました。</strong></div>
<div><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4600" src="https://loosecarrot.com/wp-content/uploads/2018/09/fcf5ef8407d3399db1b9e87ea7d2978d-300x149-1.png" alt="" width="974" height="566" srcset="https://loosecarrot.com/wp-content/uploads/2018/09/fcf5ef8407d3399db1b9e87ea7d2978d-300x149-1.png 974w, https://loosecarrot.com/wp-content/uploads/2018/09/fcf5ef8407d3399db1b9e87ea7d2978d-300x149-1-300x174.png 300w, https://loosecarrot.com/wp-content/uploads/2018/09/fcf5ef8407d3399db1b9e87ea7d2978d-300x149-1-768x446.png 768w, https://loosecarrot.com/wp-content/uploads/2018/09/fcf5ef8407d3399db1b9e87ea7d2978d-300x149-1.png 856w" sizes="(max-width: 974px) 100vw, 974px" /></div>
<div></div>
<div></div>
<p>なにはともあれ、AndroidoからMySqlへデータの登録ができました！</p>
<p>以後はもっとアプリ作成に力を入れていきたいと思います。</p>
<p><span style="color: #ff0000;">2018/09/16追記</span></p>
<p>メールの送信相手は、ランダムに選んで送信しています。</p>
<p>以前、追々載せていくと記載しましたが、</p>
<p>ランダムにユーザにメール送信(登録)するSQLはこちらです。</p>
<p><a href="https://loosecarrot.com/2018/09/16/237/">AndroidSudio MySqlでランダムにデータを取得する</a></p>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<div class="concept-box5">
<p>・AndroidでSocket通信<br />
<a href="http://qiita.com/tomoima525/items/daa30505ad18e89641f9" target="_blank" rel="noopener noreferrer">http://qiita.com/tomoima525/items/daa30505ad18e89641f9</a></p>
<p>・AsyncTaskを使った非同期処理のきほん<br />
<a href="http://dev.classmethod.jp/smartphone/android/asynctask/" target="_blank" rel="noopener noreferrer">http://dev.classmethod.jp/smartphone/android/asynctask/</a></p>
<p>・AsyncTaskの使い方考察<br />
<a href="http://d.hatena.ne.jp/Nagise/20120309/1331265123%E3%80%80" target="_blank" rel="noopener noreferrer">http://d.hatena.ne.jp/Nagise/20120309/1331265123%E3%80%80</a></p>
<p>・Androidを使った備忘録を作ってみよう<br />
<a href="http://web.sfc.wide.ad.jp/~tinaba/tutorials/AndroidCS/" target="_blank" rel="noopener noreferrer">http://web.sfc.wide.ad.jp/~tinaba/tutorials/AndroidCS/</a></p>
<p>・androidエミュレータからlocalhostへの接続<br />
<a href="http://blog.ceed.jp/?p=298" target="_blank" rel="noopener noreferrer">http://blog.ceed.jp/?p=298</a></p>
<p>・Android : How to send data to remote database without using PHP or any webservices?<br />
<a href="http://stackoverflow.com/questions/15739407/android-how-to-send-data-to-remote-database-without-using-php-or-any-webservic" target="_blank" rel="noopener noreferrer">http://stackoverflow.com/questions/15739407/android-how-to-send-data-to-remote-database-without-using-php-or-any-webservic</a></p>
</div>The post <a href="https://loosecarrot.com/2018/09/13/220/">android MySql接続 非同期処理(MySqlローカル接続エラー原因調査 2)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/09/13/220/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">220</post-id>	</item>
		<item>
		<title>android MySql接続 SQLException: No suitable driver 対応方法！</title>
		<link>https://loosecarrot.com/2018/09/12/209/</link>
					<comments>https://loosecarrot.com/2018/09/12/209/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Wed, 12 Sep 2018 00:10:21 +0000</pubDate>
				<category><![CDATA[Java/AndroidStudio]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">http://loosecarrot.com/?p=209</guid>

					<description><![CDATA[<p>原因を調べることに時間がかかりましたが、調査をしました。 調査した結果を更新していきます。 前回発生していたExceptionについて java.sql.SQLException: No suitable driver</p>
The post <a href="https://loosecarrot.com/2018/09/12/209/">android MySql接続 SQLException: No suitable driver 対応方法！</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>原因を調べることに時間がかかりましたが、調査をしました。</p>
<p>調査した結果を更新していきます。</p>
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">前回発生していたExceptionについて</h2>
<p><span style="color: #ff0000;">java.sql.SQLException: No suitable driver</span></p>
<p>このExceptionは<strong><span style="color: #0000ff;">クラスパスを通す</span></strong>ことで解決できました。</p>
<p>手順は以下です。</p>
<h3>①JDBCのドライバーのダウンロード</h3>
<p>こちらからダウンロードできます。</p>
<p><a href="http://dev.mysql.com/downloads/connector/j/" target="_blank" rel="noopener noreferrer">http://dev.mysql.com/downloads/connector/j/</a></p>
<p>複数回解凍を行って「～.jar」のファイルを取得してください</p>
<p>何回解凍したかは忘れましたが&#8230;</p>
<h3>②JDBCドライバーの配置</h3>
<p>プロジェクトフォルダにある<span style="color: #0000ff;">libs</span>フォルダに配置してください。</p>
<h3>③JDBCのドライバーを認識させる</h3>
<p>ちょっと文章で書くのは難しいので、キャプチャで説明します。</p>
<p>プロジェクトのビューのプロジェクトの名前で右クリックするし、<br />
メニューのOpen Module Settingsをクリック</p>
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-212" src="https://loosecarrot.com/wp-content/uploads/2018/09/E382AFE383A9E382B9E38391E382B9E8A8ADE5AE9AE291A0-thumbnail2-300x214.png" alt="" width="300" height="214" />
<p>Project StructureのDependanciesタブを開き、<br />
右端の「+」をクリックする</p>
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-213" src="https://loosecarrot.com/wp-content/uploads/2018/09/E382AFE383A9E382B9E38391E382B9E8A8ADE5AE9AE291A1-thumbnail2-300x184.png" alt="" width="300" height="184" />
<p>libsフォルダに配置したJDBCドライバーを選択する</p>
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-214" src="https://loosecarrot.com/wp-content/uploads/2018/09/E382AFE383A9E382B9E38391E382B9E8A8ADE5AE9AE291A2-thumbnail2-300x218.png" alt="" width="300" height="218" />
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">DBへ登録後</h2>
<p>エミュレータからMySqlのDBへ登録を行ってみましたが、</p>
<p>以下のエラーが発生しました</p>
<p><span style="color: #0098cb;">02-19 12:52:01.747 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.SocketException: java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 3306): connect failed: ECONNREFUSED (Connection refused)<br />
02-19 12:52:01.747 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: ** BEGIN NESTED EXCEPTION **<br />
02-19 12:52:01.748 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: java.net.SocketException<br />
02-19 12:52:01.748 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: MESSAGE: java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 3306): connect failed: ECONNREFUSED (Connection refused)<br />
02-19 12:52:01.748 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: STACKTRACE:<br />
02-19 12:52:01.749 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: java.net.SocketException: java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 3306): connect failed: ECONNREFUSED (Connection refused)<br />
02-19 12:52:01.749 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:143)<br />
02-19 12:52:01.749 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at com.mysql.jdbc.MysqlIO.(MysqlIO.java:225)<br />
02-19 12:52:01.749 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at com.mysql.jdbc.Connection.createNewIO(Connection.java:1805)<br />
02-19 12:52:01.749 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at com.mysql.jdbc.Connection.(Connection.java:452)<br />
02-19 12:52:01.749 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)<br />
02-19 12:52:01.750 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at java.sql.DriverManager.getConnection(DriverManager.java:179)<br />
02-19 12:52:01.750 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at java.sql.DriverManager.getConnection(DriverManager.java:213)<br />
02-19 12:52:01.750 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at com.example.loosecarrot.whogotmessage.HttpRqst.doInBackground(HttpRqst.java:96)<br />
02-19 12:52:01.750 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at com.example.loosecarrot.whogotmessage.HttpRqst.doInBackground(HttpRqst.java:22)<br />
02-19 12:52:01.750 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at android.os.AsyncTask$2.call(AsyncTask.java:292)<br />
02-19 12:52:01.750 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at java.util.concurrent.FutureTask.run(FutureTask.java:237)<br />
02-19 12:52:01.767 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)<br />
02-19 12:52:01.767 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)<br />
02-19 12:52:01.767 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)<br />
02-19 12:52:01.767 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: at java.lang.Thread.run(Thread.java:818)<br />
02-19 12:52:01.768 23667-23737/com.example.loosecarrot.whogotmessage I/System.out: ** END NESTED EXCEPTION **</span></p>
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">対応方法</h2>
<p>対応方法は調査済みです。</p>
<p>そのうち備忘録として投稿していきたいと思います。</p>
<p><span style="color: #ff0000;">2018/09/15追記</span><br />
以下でDB(MySQL)へ登録できる方法を記載しているので見てみて下さい。<br />
<a href="https://loosecarrot.com/2018/09/13/220/" target="_blank" rel="noopener noreferrer">android MySql接続 非同期処理(MySqlローカル接続エラー原因調査 2)</a><img loading="lazy" decoding="async" src="http://www18.a8.net/0.gif?a8mat=2BYEK6+2D50AA+1B26+I708X" alt="" width="1" height="1" border="0" /></p>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<div class="concept-box5">・Java, Servlet: No suitable driver found for “～” の原因と解決法<br />
<a href="https://yukun.info/java-no-suitable-driver-found/">https://yukun.info/java-no-suitable-driver-found/</a>・ubuntuにmysqlのDBを作ってそれにandroidからアクセス<br />
<a href="http://kokawa2003.blogspot.jp/2014/08/ubuntumysqldbandroid.html" target="_blank" rel="noopener noreferrer">http://kokawa2003.blogspot.jp/2014/08/ubuntumysqldbandroid.html</a></div>The post <a href="https://loosecarrot.com/2018/09/12/209/">android MySql接続 SQLException: No suitable driver 対応方法！</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/09/12/209/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">209</post-id>	</item>
		<item>
		<title>android MySql接続 メッセージアプリ 自作② DB(MySql)の登録</title>
		<link>https://loosecarrot.com/2018/09/11/192/</link>
					<comments>https://loosecarrot.com/2018/09/11/192/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Mon, 10 Sep 2018 23:55:06 +0000</pubDate>
				<category><![CDATA[Java/AndroidStudio]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">http://loosecarrot.com/?p=192</guid>

					<description><![CDATA[<p>今回は前回作成した画面に機能の実装を行っていきたいと思います。 メッセージをランダムのユーザーに送るという内容です。 ※「ランダムのユーザーに」という機能はまず置いておきます。 必要最低限のことだけができれば、他の機能に</p>
The post <a href="https://loosecarrot.com/2018/09/11/192/">android MySql接続 メッセージアプリ 自作② DB(MySql)の登録</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>今回は前回作成した画面に機能の実装を行っていきたいと思います。</p>
<p>メッセージをランダムのユーザーに送るという内容です。</p>
<p>※「ランダムのユーザーに」という機能はまず置いておきます。</p>
<p>必要最低限のことだけができれば、他の機能については後からできるので&#8230;</p>
<p>単純に<span style="color: #ff0000;">メッセージがDBへ登録できるか</span>だけを試してみたいと思います。</p>
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">・開発環境について</h2>
<p>※DBはMySQLを使っています。</p>
<p>インストール方法等は割愛します。</p>
<p>このあたりを参考にしてました。</p>
<p><strong>MySQLインストール</strong><br />
<a href="http://www.dbonline.jp/mysqlinstall/" target="_blank" rel="noopener noreferrer">http://www.dbonline.jp/mysqlinstall/</a></p>
<p><strong>MySQL Workbench5.2.37のインストールと日本語化</strong><br />
<a href="http://youforce.hatenablog.com/entry/20120206/1328543498" target="_blank" rel="noopener noreferrer">http://youforce.hatenablog.com/entry/20120206/1328543498</a></p>
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">ソースについて</h2>
<p>MySQLのDBへ登録するクエリを以下のように記述してみました。</p><pre class="urvanov-syntax-highlighter-plain-tag">@Override
public void onClick(View v)
{
　　//メール本文取得
　　String message = ((EditText)findViewById(R.id.editTextMsg)).getText().toString();
　　
　　//メール送信用SQL文取得
　　strQuery = "INSERT INTO `wgm`.`d_mail_box` " +
　　　　　　　　"(`DMB_MESSAGE_SEQ`," +
　　　　　　　　" `DMB_MESSAG`," +
　　　　　　　　" `DMB_SENDER_USER_CD`, " +
　　　　　　　　" `DMB_RECEIVER_USER_CD`," +
　　　　　　　　" `DMB_DELETE_FLG`) " +
　　　　　　　　"VALUES " +
　　　　　　　　"('2'," +
　　　　　　　　"'" + message + "',"+
　　　　　　　　"'1',"+
　　　　　　　　"'1',"+
　　　　　　　　"'0');";
　　//メール送信処理(メールをDBへ登録する処理)
　　try
　　{
　　　　sqlUtil.executeUpdate(strQuery);
　　}
　　catch (Exception e)
　　{
　　　　//エラー処理
　　　　AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
　　　　builder.setMessage(e.toString());
　　　　builder.show();
　　
　　　　return;
　　}
}</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span style="color: #ff0000;">sqlUtil</span></strong>の中身はこんな感じです。</p><pre class="urvanov-syntax-highlighter-plain-tag">public　void　executeUpdate(String　strQuery)　throws　Exception
{
　　　　//コネクション初期化
　　　　Connection　conn　=　null;

　　　　try
　　　　{
　　　　　　　　//DB接続
　　　　　　　　conn　=　DriverManager.getConnection(url,　user,　password);
　　　　　　　　Statement　stmt　=　conn.createStatement();

　　　　　　　　//クエリセット
　　　　　　　　stmt.executeUpdate(strQuery);
　　　　}
　　　　catch　(SQLException　e)
　　　　{
　　　　　　　　throw　e;
　　　　}
}</pre><p>&nbsp;</p>
<p>■実行前</p>
<p>DBは空です。</p>
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-203" src="https://loosecarrot.com/wp-content/uploads/2018/09/E799BBE98CB2E5898DDB-9c3e3-thumbnail2-1-300x78.png" alt="" width="300" height="78" />
<p>それでは、いざ<strong><span style="color: #ff0000;">メッセージ送信！</span></strong><br />
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-204" src="https://loosecarrot.com/wp-content/uploads/2018/09/E383A1E38383E382BBE383BCE382B8E98081E4BFA1-806ae-thumbnail2-167x300.png" alt="" width="167" height="300" /></p>
<p>何かExceptionがキャッチされました&#8230;</p>
<p>エラーは「<span style="color: #ff0000;">SQLException: No suitable driver</span>」</p>
<p><strong>「ドライバーがない」</strong>みたいなメッセージですね。</p>
<p>何かドライバーを取得しないといけないみたいです&#8230;</p>
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-205" src="https://loosecarrot.com/wp-content/uploads/2018/09/E98081E4BFA1E5A4B1E69597-thumbnail2-168x300.png" alt="" width="168" height="300" />
<p>原因を調べて登録できるようにしてみます。</p>
<p>原因がわかれば投稿していきたいと思います。</p>
<p>もっとこんなやり方をすれば良いのでは？という意見があれば</p>
<p>どなたからでも頂けると嬉しいです。</p>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">2018/09/13追記</span><br />
以下で原因調査して対応ができたので、確認してみてください。<br />
<a href="https://loosecarrot.com/2018/09/12/209/" target="_blank" rel="noopener noreferrer">android MySql接続 SQLException: No suitable driver 対応方法！</a><img loading="lazy" decoding="async" src="http://www18.a8.net/0.gif?a8mat=2BYEK6+2D50AA+1B26+I708X" alt="" width="1" height="1" border="0" /></p>
<div class="concept-box5">・AndroidアプリのJDBCを使ったデータベースプロ&#8230;(Yahoo知恵袋)<a href="http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12149810672" target="_blank" rel="noopener noreferrer">http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12149810672</a></div>The post <a href="https://loosecarrot.com/2018/09/11/192/">android MySql接続 メッセージアプリ 自作② DB(MySql)の登録</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/09/11/192/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">192</post-id>	</item>
		<item>
		<title>androidメッセージアプリ 自作① 画面作成</title>
		<link>https://loosecarrot.com/2018/09/10/188/</link>
					<comments>https://loosecarrot.com/2018/09/10/188/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 09 Sep 2018 23:20:35 +0000</pubDate>
				<category><![CDATA[Java/AndroidStudio]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">http://loosecarrot.com/?p=188</guid>

					<description><![CDATA[<p>前回Androidアプリを手作しようと意気込んでから 既に一ヶ月ほど経ちました。 イメージしていたアプリの画面を作ってみたので投稿しようかと思います。 練習のため、疑似ドキドキ郵便箱を作成中です。 作作成した画面 ※開発</p>
The post <a href="https://loosecarrot.com/2018/09/10/188/">androidメッセージアプリ 自作① 画面作成</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>前回Androidアプリを手作しようと意気込んでから<br />
既に一ヶ月ほど経ちました。</p>
<p>イメージしていたアプリの画面を作ってみたので投稿しようかと思います。</p>
<p>練習のため、疑似<a href="https://play.google.com/store/apps/details">ドキドキ郵便箱</a>を作成中です。</p>
<h2 style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">作作成した画面</h2>
<div></div>
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-189" src="https://loosecarrot.com/wp-content/uploads/2018/09/E382A4E383A1E383BCE382B8E794BBE99DA2-0adec-thumbnail2-300x169.png" alt="" width="300" height="169" />
<p>※開発環境は<span style="color: #ff0000;">AndroidStudio</span>です。</p>
<p>簡単にメッセージの送信画面だけを作ってみました。</p>
<p>「<strong>メッセージを送信して、ランダムの相手にメッセージが届く</strong>」</p>
<p>という機能を実現させようと考えています。</p>
<p>(まず必要最低限の機能だけを持たせる予定)</p>
<p>さて、早いですが今回はこれくらいにしておきます。</p>
<p>次回以降は実装の内容になります。</p>
<p>作業が進み次第ここで共有してみようと思います。</p>
<p>次回は<a href="https://loosecarrot.com/2018/09/12/192/">MySQLのDB登録</a>について更新します。</p>
<p>私は開発素人なので、</p>
<p>もっとこんなやり方をすれば良いのでは？という意見があれば</p>
<p>どなたからでも頂けると嬉しいです。<img loading="lazy" decoding="async" src="http://www18.a8.net/0.gif?a8mat=2BYEK6+2D50AA+1B26+I708X" alt="" width="1" height="1" border="0" /></p>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<p>&nbsp;</p>
<div class="concept-box5">・Google Play ドキドキ郵便箱<br />
<a href="https://play.google.com/store/apps/details?id=com.fuzixx.dokidokipostbox&amp;hl=ja" target="_blank" rel="noopener noreferrer">https://play.google.com/store/apps/details</a></div>The post <a href="https://loosecarrot.com/2018/09/10/188/">androidメッセージアプリ 自作① 画面作成</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/09/10/188/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">188</post-id>	</item>
		<item>
		<title>C# SQLServerへの接続方法</title>
		<link>https://loosecarrot.com/2018/09/09/283/</link>
					<comments>https://loosecarrot.com/2018/09/09/283/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 09 Sep 2018 05:55:18 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[C#]]></category>
		<guid isPermaLink="false">http://loosecarrot.com/?p=283</guid>

					<description><![CDATA[<p>勉強のためにSQLServerとVisualStudioを入れてアプリケーションを作っています。 そんな時に、C#でデータベースへアクセスするって具体的にどう書けば良いのか 書き方が全く分からない時期がありました。 初球</p>
The post <a href="https://loosecarrot.com/2018/09/09/283/">C# SQLServerへの接続方法</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>勉強のためにSQLServerとVisualStudioを入れてアプリケーションを作っています。</p>
<p>そんな時に、C#でデータベースへアクセスするって具体的にどう書けば良いのか<br />
書き方が全く分からない時期がありました。</p>
<p>初球から中級レベルにはなったので、<br />
このタイミングでプログラム初心者の手助けになるよう書き方を紹介します。</p>
<h2 id="01" style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">SQLServer接続 &#8211; SELECT</h2>
<p>ソースコードとしては以下です。</p>
<p>引数として<span style="color: #0000ff;">String sql</span>にSELECT文を受け取ります。</p>
<p>SELECT文で返ってきたDataTableへテーブルに名前を付けてDataSetに格納します。</p><pre class="urvanov-syntax-highlighter-plain-tag">using System.Data.SqlClient;
using System.Data.Sql;
using System.Data;

public DataSet executeSql(String sql, string tableName)
{
    DataSet dsResult = new DataSet();

    SqlConnection sqlCon = null;
    SqlTransaction sqlTran = null;
    SqlCommand sqlCommand = null;
    SqlDataAdapter dataAdapter = null;
    DataSet dsData = new DataSet();
    
    sqlCon = new SqlConnection();
    
    sqlCon.ConnectionString = "Server=PCName or ServerName; Database=DBName; User ID=sa;Password=PassWord;";
    sqlCon.Open();
    
    sqlTran = sqlCon.BeginTransaction();
    sqlCommand = new SqlCommand(sql, sqlCon, sqlTran);
    dataAdapter = new SqlDataAdapter(sqlCommand);
    dataAdapter.Fill(dsData, tableName);
    
    sqlTran.Commit();
    dataAdapter.Dispose();
    sqlCommand.Dispose();
    sqlCon.Close();
    
    return dsData;
}</pre><p>&nbsp;</p>
<h2 id="02" style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">SQLServer接続 &#8211; INSERT UPDATE DELETE</h2>
<p>ソースコードとしては以下です。</p>
<p>引数として<span style="color: #0000ff;">String sql</span>にSQL文を受け取ります。</p>
<p>sqlを使ってデータベースへ更新をかけます。</p><pre class="urvanov-syntax-highlighter-plain-tag">using System.Data.SqlClient;
using System.Data.Sql;
using System.Data;

public void ExecuteNonQuery(string sql)
{
    using (SqlCommand command = new SqlCommand())
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = conn.ConnectionString =
        @"Data Source=PCName or ServerName;Initial Catalog=DBName;User Id=sa;Password=PassWord;";
        // トランザクションを開始します。
        conn.Open();
        SqlTransaction transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted);
    
        try
        {
            command.CommandText = sql;
            command.Connection = conn;
            command.Transaction = transaction;
            command.ExecuteNonQuery();
            
            //トランザクションをコミットします。
            transaction.Commit();
        }
        catch (System.Exception)
        {
            //トランザクションをロールバックします。
            transaction.Rollback();
            throw;
        }
        finally
        {
            conn.Close();
        }
    }
}</pre><p>&nbsp;</p>
<h2 id="03" style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">SQLServer接続時の補足</h2>
<div></div>
<h3><span style="color: #000000;">ConnectionString について</span></h3>
<div></div>
<div>記載するのは以下の3つです。</div>
<div> &#8220;Server=PCName or ServerName;</div>
<div>   Database=DBName;</div>
<div>   User ID=sa;Password=PassWord;&#8221;;</div>
<p>&nbsp;</p>
<h3>Server(Data Source)</h3>
<div>SQLServeが入っていれば、</div>
<div></div>
<div>以下のSQLで簡単に確認できます。</div>
<div></div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT HOST_NAME()</pre><p><span style="color: #ff0000;">※IPアドレスでも指定可能ですが、変わってしまうこともあると思うので、</span></p>
<p><span style="color: #ff0000;">個人的にはホスト名を記載することをお勧めします</span></p>
<h3>Database</h3>
<div>以下のSQLでDatabaseの一覧が取得できるので、対象を記載してください。</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
NAME
,DATABASE_ID
,CREATE_DATE
FROM
SYS.DATABASES;</pre><p>&nbsp;</p>
<h3>User IDとPassword</h3>
<div>2パターンに分かれます。</div>
<p>&nbsp;</p>
<div>・SQLServer認証の場合</div>
<p>サンプルに記載の通り、ユーザ名とパスワードを使って認証します。</p>
<p>記載するのはSQLServerに設定しているユーザ名とパスワードです。</p>
<p>SQLServerManagementStudioを開く際に確認可能です。</p>
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-322" src="https://loosecarrot.com/wp-content/uploads/2018/09/4d1ab20bc283b75278c317410fc3d5a3-2-300x209.png" alt="" width="300" height="209" />
<div>・Windows認証の場合</div>
<div>赤字の通りに変更すればWindows認証は可能です。</div>
<p>Server=PCName or ServerName;Database=DBName;<span style="color: #ff0000;">Integrated Security=True;</span></p>
<p><span style="color: #0000ff;">SQLServer認証、Windows認証の違い</span>はそもそも何かについては、</p>
<p>よい説明があったので<a href="https://sql-oracle.com/sqlserver/?p=133#SQL_Server">こちら</a>をご確認ください。</p>
<p><span style="color: #ff0000;">※私のように個人の勉強レベルのために使っている場合関係はありません。</span></p>
<p>企業のシステム導入になれば知っておくべきと思います。</p>
<h2 id="03" style="margin: 20px 0 0; border-left: 7px padding: 4px 0 4px 6px;">おわりに</h2>
<p>プログラミングの勉強を始められた方々はこの記事を読まれることが多いのではないかと思います。</p>
<p>私はまだ文系卒でプログラムに触れて4年程度ですが、</p>
<p>プログラムへ新たに触れていかれる方へもっと有益な情報を紹介できればと思います。</p>
<a href="https://loosecarrot.com/2019/11/25/3860/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/11/2aad409f7fb9656e0a91f95c8fb2c1b7-1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C#アプリ開発 メールお知らせアプリ</span><span class="blog-card-excerpt">

開発案件の経験は2案件ほどで、ほとんど経験ありません。

そんな私が独学でプログラミングの勉強をしてきました。

そこで...</span></div></div></a>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<p>&nbsp;</p>
<div class="concept-box5">
<div>・SQLServerでホスト名を取得する</div>
<div><a href="https://lightgauge.net/database/sqlserver/958/">https://lightgauge.net/database/sqlserver/958/</a></div>
<div>・SQL Serverでインスタンス上のデータベース一覧を取得するSQL文</div>
<div><a href="https://itmemo.net-luck.com/sqlserver-database-list/">https://itmemo.net-luck.com/sqlserver-database-list/</a></div>
<div>・ASP.NET で MSSQL に Windows 認証で接続</div>
<div><a href="https://creativeweb.jp/fc/apppool-identity/">https://creativeweb.jp/fc/apppool-identity/</a></div>
<div>・SQL ServerのWindows認証・SQL Server認証とは</div>
<div><a href="https://sql-oracle.com/sqlserver/?p=133#SQL_Server">https://sql-oracle.com/sqlserver/?p=133#SQL_Server</a></div>
</div>The post <a href="https://loosecarrot.com/2018/09/09/283/">C# SQLServerへの接続方法</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/09/09/283/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">283</post-id>	</item>
	</channel>
</rss>
