遅かりし明けおめです。
すっかり二日も休んでました。
先週と今週の水曜日にクリスマス、正月と飛び飛び休日だったんで、なんだか働くのが馬鹿らしくなってきてます。
しかぁーし、来週からまったく通常の業務スケジュールでそこへ突入するのが怖い。。。
ふんどし締めてくぞー!
で、SQLです。
ねこはあまり得意ではありませんが、同じデータをひとつのテーブルから見つけ出す方法や、簡単にバックアップを取っちゃう方法なんかは初心者レベルではありますが、とても便利です。
1.同じデータをひとつのテーブルから見つけ出す方法
select unique_aaa, bbb, ccc
from tamatable t where exists
(select unique_aaa, bbb, ccc
from tamatable where t.unique_aaa = unique_aaa
and t.bbb = bbb and t.ccc = ccc
group by unique_aaa, bbb, ccc having count(unique_aaa) > 1)
2.二つのテーブルを比べる方法
select min(test) as test, aaa, bbb, ccc
from(
select 'tamatable' as test, t.aaa, t.bbb, t.ccc
from tamatable t
union all
select 'miketable' as test, m.aaa, m.bbb, m.ccc
from miketable m
)temp
group by aaa, bbb, ccc
having count(*) = 1
3.データごとに番号を振り当てる方法
select row_bunber() over(order by aaa) as rownumber,
aaa, bbb, ccc from tamatable order by aaa
4.長いテキスト順に表示する方法(これはテストデータを取るときによく使います。)
select aaa, length((trim(nagainamae1) ||' ' || trim(nagainamae2)) as len,
(trim(nagainamae1) ||' ' || trim(nagainamae2)
from tamatable order by len
で、とった後のデータをうまい具合に
nagainamae1 : nagainamae2
と表示し、尚且つ73以上の字数の場合に折り返すようjavascriptで制御するとこうなります。
//thisとは表示したいテキストフィールドのことです。
this.rawValue = nagainamae1.rawValue+" : "+nagainamae2.rawValue;
//ここで『:』を探させてその位置を得ます。
var vSymb = this.rawValue.indexOf(":");
//その位置までの文字、すなわちnagainamae1をvTopと定義付けます。vSecoundLineはそれ以降の終わりまでの文字となります。
var vTop = this.rawValue.substring(0,vSymb);
var vSecondLine = this.rawValue.substring(vSymb+1);
//ここでこのテキストフィールドの文字数を制限します。
if (this.rawValue.length > 73){ //全体数が73文字より大きいものを以下に適用。
vS1 = vSecondLine.substring(0,73);
var vBlank = vS1.lastIndexOf(" "); //73文字中、一番右側にある空白をvBlankとして得ます。
vThirdLine = vSecondLine.substring(vBlank+1); //vBlank以降の文字をvThirdLineに定義つけます。
vSecondLine = vSecondLine.substring(0,vBlank); //またvSecondLineの定義を空白のvBlankまでと再度定義つけます。
this.rawValue = vTop+":\n"+vSecondLine+"\n"+vThirdLine; //『+"\n"+』をつかって折り返し地点をつけます。
}
たぶんね、ちゃんとループをつかってやればもっと自由な動的な動きができるんだろうけど、今は時間の都合でこれが精一杯。すまぬ。
5.バックアップテーブルなどのテーブルのコピーをとる方法。
create table tamatable_backup as (
select * froj from tamatable)
with data
AS400 DB2ではジャーナルが取れませんのであしからず。
6.バックアップの復元方法。
まずはやっちまった方を削除して
delete from tamatable
バックアップテーブルを挿入してやる。
insert into tamatable select from tamatable_backup
7.二つのまったく違うテーブルをキーフィールドを頼りにアップデートする方法。
UPDATE CITY_TABLE
SET POPULATION = (
SELECT P2.POPULATION2010 AS NUMERIC
FROM NEW2010TABLE P2
WHERE CITY = P2.PLACE_NAME
),
USERID = 'DEQ081',
CDATE = '2011-07-05'
WHERE
EXISTS(SELECT 1 FROM NEW2010TABLE P2
WHERE CITY = P2.PLACE_NAME)
これであれば、フィールド数などがちがっててもキーさえあえばすんなりとアップデートしてくれます。
ついでをいうと、AS400のデータテーブル格納テーブルはだいたいQSYS2.SCHEMATAがライブラリーで、それとQSYS2.SYSTABLESがフィジカル・ロジカルファイル名です。
今日のメモはここまで、おしまいっ!さぁ、仕事しよ。