<?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/"
	>

<channel>
	<title>SQL Master &#187; SQLドリル</title>
	<atom:link href="http://www.sql-master.net/articles/SQLcategory/sql-drill/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sql-master.net</link>
	<description>OracleやMS SQL serverの資格対策</description>
	<lastBuildDate>Tue, 24 Aug 2010 13:58:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>【SQLドリル002】集計　COUNT関数、サブクエリ</title>
		<link>http://www.sql-master.net/articles/SQL62.html</link>
		<comments>http://www.sql-master.net/articles/SQL62.html#comments</comments>
		<pubDate>Wed, 19 Aug 2009 13:55:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQLドリル]]></category>

		<guid isPermaLink="false">http://sql.jpn.org/?p=62</guid>
		<description><![CDATA[コンピュータ名とそれに対するジョブのステータスが保存されているテーブル、DRILL002がある。
ComputerName          JobStatus
&#8212;&#8212;&#8212;&#8212;&#038; [...]]]></description>
			<content:encoded><![CDATA[<p>コンピュータ名とそれに対するジョブのステータスが保存されているテーブル、DRILL002がある。</p>
<blockquote><p>ComputerName          JobStatus<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
PC001                 Normal<br />
PC002                 Normal(completed)<br />
PC003                 Error(system)<br />
PC004                 Error<br />
PC005                 Normal(proceeding)<br />
PC006                 Error(setup)<br />
PC007                 Normal</p></blockquote>
<p>NormalでもNormal(completed)やNormal(proceeding)などがあるが、どれもNormalとして集計したい。また、ErrorもError(setup)やError(system)などがあるが、どれもErrorとして集計したい。<br />
以下のようにNormalとErrorの合計数を求めるにはどのようにすれば良いか。</p>
<blockquote><p>Normal        Error<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
4                     3</p></blockquote>
<p> </p>
<p> <br />
<strong><span style="color: #ff0000;">MS SQL Serverでの回答案</span></strong><br />
まず、Normalの合計を求めます。</p>
<blockquote><p>SELECT COUNT(*) AS &#8216;Normal&#8217; FROM DRILL002 WHERE JobStatus like &#8216;Normal%&#8217;;</p>
<p>Normal<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
4</p></blockquote>
<p>次に、Errorの合計を求めます。</p>
<blockquote><p>SELECT COUNT(*) AS &#8216;Error&#8217; FROM DRILL002 WHERE JobStatus like &#8216;Error%&#8217;;</p>
<p>Error<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
3</p></blockquote>
<p>NormalとErrorの数を1つのクエリで同時に表示させるには、サブクエリを使います。</p>
<blockquote><p>SELECT<br />
(SELECT COUNT(*) FROM DRILL002<br />
WHERE JobStatus like &#8216;Normal%&#8217;) as &#8216;Normal&#8217;,<br />
(SELECT COUNT(*) FROM DRILL002<br />
WHERE JobStatus like &#8216;Error%&#8217;) as &#8216;Error&#8217;<br />
FROM Drill002;</p>
<p>Normal        Error<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
4                   3<br />
4                   3<br />
4                   3<br />
4                   3<br />
4                   3<br />
4                   3<br />
4                   3</p></blockquote>
<p>複数表示されているので、DISTINCTを利用して、見やすくします。</p>
<blockquote><p>SELECT DISTINCT<br />
(SELECT COUNT(*) FROM DRILL002<br />
WHERE JobStatus like &#8216;Normal%&#8217;) as &#8216;Normal&#8217;,<br />
(SELECT COUNT(*) FROM DRILL002<br />
WHERE JobStatus like &#8216;Error%&#8217;) as &#8216;Error&#8217;<br />
FROM Drill002;</p>
<p>Normal            Error<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
4                   3</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.sql-master.net/articles/SQL62.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【SQLドリル001】文字の抽出　REPLACE, SUBSTRING, CHARINDEX</title>
		<link>http://www.sql-master.net/articles/SQL49.html</link>
		<comments>http://www.sql-master.net/articles/SQL49.html#comments</comments>
		<pubDate>Wed, 19 Aug 2009 11:55:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SQLドリル]]></category>

		<guid isPermaLink="false">http://sql.jpn.org/?p=49</guid>
		<description><![CDATA[以下のような文字列が入力された列、FullPCNameがある。このFullPCNameからコンピュータ名だけを抽出したい。
FullPCName
&#8212;&#8212;&#8212;&#8212;&#8212;&# [...]]]></description>
			<content:encoded><![CDATA[<p>以下のような文字列が入力された列、FullPCNameがある。このFullPCNameからコンピュータ名だけを抽出したい。</p>
<blockquote><p>FullPCName<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Tokyo332#server01.sql.jpn.org<br />
Fukuoka00321#server02.sql.jpn.org<br />
server03.sql.jpn.org<br />
Sapporo883#server04.sql.jpn.org<br />
server04.sql.jpn.org<br />
server05<br />
:</p></blockquote>
<p>server01やserver02のように、ドメイン名を除いたコンピュータ名のみを表示させるにはどのようなSQL文にすれば良いか？</p>
<p>回答例：</p>
<blockquote><p>PCName<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
server01<br />
server02<br />
server03<br />
server04<br />
server04<br />
server05</p></blockquote>
<p> </p>
<p> </p>
<p> </p>
<p><strong><span style="color: #ff0000;">MS SQL Serverでの回答案</span></strong></p>
<p>まず、ドメイン名をブランクで置き換える事から考えましょう。指定した文字列を置換するには、REPLACE関数を使用します。</p>
<blockquote><p>REPLACE(列名, 置換対象文字列, 置換後の文字列)</p>
<p>SELECT REPLACE(FullPCName, &#8216;.sql.jpn.org&#8217;, &#8221;)　as PCName　FROM DRILL001;</p>
<p>PCName<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Tokyo332#server01<br />
Fukuoka00321#server02<br />
server03<br />
Sapporo883#server04<br />
server04<br />
server05</p></blockquote>
<p>次はTokyo0332#のような文字列がある場合は、それを取り除く必要があります。そのためには、まず、#以前の文字列を抽出します。抽出するためには、先頭から#までの文字数を取得して、SUBSTRING関数で文字列を取得します。</p>
<blockquote><p>SELECT CHARINDEX(&#8217;#', REPLACE(FullPCName, &#8216;.sql.jpn.org&#8217;, &#8221;)) AS &#8216;文字数&#8217; from DRILL001;</p>
<p>文字数<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
9<br />
13<br />
0<br />
11<br />
0<br />
0</p>
<p>SELECT SUBSTRING(REPLACE(FullPCName, &#8216;.sql.jpn.org&#8217;, &#8221;), 0, CHARINDEX(&#8217;#', REPLACE(FullPCName, &#8216;.sql.jpn.org&#8217;, &#8221;))+1) AS &#8216;取り除く文字列&#8217; from DRILL001;</p>
<p>取り除く文字列<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Tokyo332#<br />
Fukuoka00321#<br />
&lt;NULL&gt;<br />
Sapporo883#<br />
&lt;NULL&gt;<br />
&lt;NULL&gt;</p></blockquote>
<p>最後にREPLACE関数で取り除く文字列をNULLで置き換えます。</p>
<blockquote><p>SELECT REPLACE(REPLACE(FullPCName, &#8216;.sql.jpn.org&#8217;, &#8221;), SUBSTRING(REPLACE(FullPCName, &#8216;.sql.jpn.org&#8217;, &#8221;), 0, CHARINDEX(&#8217;#', REPLACE(FullPCName, &#8216;.sql.jpn.org&#8217;, &#8221;))+1), &#8221;) AS &#8216;PCName&#8217; from DRILL001;</p>
<p>PCName<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
server01<br />
server02<br />
server03<br />
server04<br />
server04<br />
server05</p></blockquote>
<p> </p>
<p>とても複雑になってしまいましたね。他の最適な方法があれば教えてください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sql-master.net/articles/SQL49.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
