最近のトラックバック

最近のコメント

2017年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

« TEMP領域について | トップページ | ORA-00980 »

2006年11月29日 (水)

文字列を横に連結する方法

pmlのメーリングリストと以下のブログからまとめたメモ。

数値は SUM() 関数で集計、文字列を集計的に結合するには( Transact-SQL で aggregate concatenation )

文字列を集計的に結合する(ユーザー定義関数経由で GROUP BY 対応)

【テーブル】

SQLServerだとNothwindデータベースにあるCategoriesテーブル、Oracleでは同じデータ・設定でCategoriesテーブルを作成してお試し

【Categoriesテーブルのデータ】

CategoryID CategoryName Description
1 Beverages Soft drinks, coffees, teas, beers, and ales
2 Condiments Sweet and savory sauces, relishes, spreads, and seasonings
3 Confections Desserts, candies, and sweet breads
4 Dairy Products Cheeses
5 Grains/Cereals Breads, crackers, pasta, and cereal
6 Meat/Poultry Prepared meats
7 Produce Dried fruit and bean curd
8 Seafood Seaweed and fish

【SQLServerで実行】

実行したSQLは↓

DECLARE @STR NVARCHAR(3000)
SET @STR=''
SELECT @STR=@STR+CategoryName FROM Categories
SELECT @STR 

かえってきた結果は↓

BeveragesCondimentsConfectionsDairy ProductsGrains/CerealsMeat/PoultryProduceSeafood

【ORACLEで実行】

実行したSQLは↓

SELECT REPLACE(SYS_CONNECT_BY_PATH(CATEGORYNAME,':'),':','') FROM CATEGORIES
WHERE CATEGORYID=8
START WITH CATEGORYID = 1
CONNECT BY PRIOR CATEGORYID = CATEGORYID - 1
/

 ※SYS_CONNECT_BY_PATHは階層問合わせでのみ使用可能な関数で、CONNECT BY条件でもどってきた値を区切り文字ありで連結した文字列として返す関数です。空文字('')とかは指定できないのでダミーでとりあえずコロンを指定してReplaceで空文字に置き換えてます。

かえってきた結果は↓

CATEGORYID

------------------------------------------

BeveragesCondimentsConfectionsDairy ProductsGrains/CerealsMeat/PoultryProduceSeafood

1行が選択されました。

« TEMP領域について | トップページ | ORA-00980 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/181317/12869184

この記事へのトラックバック一覧です: 文字列を横に連結する方法:

« TEMP領域について | トップページ | ORA-00980 »