縦に並んだ複数行のデータをカンマ区切りで横並びに表示

ITコーディネータのシュウです。

IMG_0402

写真は、前回と同じく「古代蓮の里」で撮った古代蓮の花です。
今年も暑い夏が続くと思えば、大型台風の影響で大雨などもあり、とても変わりやすく難しい天候ですね。台風などでこれ以上被害が出ないことを祈りつつ、天気予報をいつもチェックして注意しないといけないですね。

<本日の題材>
縦に並んだ複数行のデータをカンマ区切りで横並びに表示する方法(SQL Server)

縦に並んだ複数行のデータを、カンマ区切りで横並びに表示する方法について、最近SQL Serverで確認したので、忘れないようにアップしておきます。
SQL Serverでは、SQLクエリにFOR XML句というものを使うことで、SQLクエリの結果をXML形式で取得することができるのですが、今回はそれを使ってみる方法です。

例えば、地方とその地方に属する都道府県を、それぞれ、地域マスタ、府県マスタということで、下記のように持たせてみます。

SELECT * FROM dbo.地域マスタ
ORDER BY 地域CD;
地域マスタ

SELECT * FROM dbo.府県マスタ
ORDER BY 府県CD;
府県マスタ
… 続きは省略

ここで、上記の地域ごとの都道府県の情報を、カンマ区切りで横並びに表示させたいときに、以下のようにすると可能です。

SELECT
A.地域CD
, A.地域名
,(SELECT都道府県名 + ','
FROM dbo.府県マスタ
WHERE 地域CD = A.地域CD
ORDER BY 府県CD
FOR XML PATH('')) AS 都道府県名
FROM dbo.地域マスタ A
ORDER BY A.地域CD
;
府県結果

FOR XML句をPATHモードで指定し、スペース区切りの文字列を生成しながら、カンマでつなげるというかたちにすると、上記の結果のようになります。
今日は以上まで

にほんブログ村 IT技術ブログへ
にほんブログ村

外部結合について(2)

ITコーディネータのシュウです。 IMG_0412

前回紹介したさきたま古墳のそばに、古代蓮の里という公園(行田市の天然記念物であり市の花である「古代蓮(行田蓮)」をシンボルとする公園)があり、そこに行った時の写真です。6月下旬から8月上旬にかけて42種類12万株の花蓮を見ることができるということですが、花弁の数が少ない原始的な形態を持つ行田蓮は、約1400~3000年前の蓮であると言われています。 午前中、正午くらいまでが見ごろのようですよ! 何か神秘的な雰囲気もあり、結構きれいですね。

<本日の題材> 外部結合について(SQL Server 編) 前回実施した外部結合の内容を、SQL Server2012でも試してみましたので、報告します。

EMP表(従業員表)とDEPT表(部署表)をDEPTNOを条件として外部結合する例です。

1.左外部結合: LEFT [OUTER] JOIN の例 ([OUTER]は省略可能)

SELECT E.empno, E.ename, E.job, D.dname, D.deptno FROM dbo.EMP E LEFT OUTER JOIN dbo.DEPT D ON E.deptno = D.deptno ORDER BY E.empno;

外部結合1_sqlserver

2.右外部結合: RIGHT [OUTER] JOIN の例

SELECT E.empno, E.ename, E.job, D.dname, D.deptno FROM dbo.DEPT D RIGHT OUTER JOIN dbo.EMP E ON D.deptno = E.deptno ORDER BY E.empno;

外部結合1_sqlserver

3.完全外部結合: FULL [OUTER] JOIN

SELECT E.empno, E.ename, E.job, D.dname, D.deptno FROM dbo.EMP E FULL OUTER JOIN dbo.DEPT D ON E.deptno = D.deptno ORDER BY E.empno;

完全外部結合_sqlserver

SQL Server2012でも同様な内容を確認しました。ちなみに、SQL Server2000の頃は、外部結合は *= という演算子を使っていましたが、データベースの互換性レベル(モード)が90以上ではこの演算子はサポートされなくなっていますね。 Oracleも昔は (+) というのを使用していましたが。。。

今日は以上まで

 

にほんブログ村 IT技術ブログへ
にほんブログ村