SQL いろいろ
Order by field ASC = 昇順
Order by field DESC = 降順
Group by と Order by の併用
Group by と Order by を併用したいケースはいくつかあるが、
Group by は Order by より先に処理されるため、併用が難しい。
Group By されたレコードのうち最新日付のレコードのみを抽出
select cate1, field1, max(create) as max_date from obj_table group by cate1, field1 order by max_date desc;
サブクエリでは? ちょっと怪しい
select cate1, field1, max(create) as max_date from (select * from obj_table order by create desc) as RS group by cate1, field1
グループ化したデータをHAVING句で絞り込む
SELECT CustomerID,AVG(TotalDue) AS 平均支払額
FROM Sales.SalesOrderHeader
WHERE CustomerID < 100
GROUP BY CustomerID
HAVING AVG(TotalDue) >= 1000
Oracleでは、null と 空文字=BLANK() はあいまいだが、
SQL serverでは区別される
isnull(field, '')
nullを空文字に置き換える
space(-1) は null が返る
文字列からスペースを削除する
文字列の前後のスペースは、
select rtrim(ltrim(スペースの入った文字列))
文字列の中にもスペースあるときは、
select replace(スペースの入った文字列, ' ', '')
SQL-Serverの自動採番(IDENTITY値)
SQL serverでは、Accessの iif の代わりに case を使う
<ACCESS>
select ・・・,
iif(field1=100 And field2 Is Not Null,'certified', Null) as Result
from obj_table
<SQL Server>
select ・・・,
case when field1=100 And field2 Is Not Null then 'certified' else Null end as Result
from obj_table
テーブルのコピー
select * into NewTable from SourceTable;
主キー設定は付いてこない
SISS(DTS)パッケージの格納場所
SQL server2005 以降では、
ファイルシステム指定の場合、
C:\Program Files\Microsoft SQL Server\110\DTS\Packages
msdb指定の場合、
msdb.sysssispackages
(SQL Server Management Studio の integration service へ接続して確認)
SQL Server2000 では、
msdb指定の場合、
(SQL Server Management Studio の データベース へ接続して、データ変換サービス > ローカルパッケージ で確認)
SQLServerでシステム日付を取得する
SQL Serverのシステム日付は以下のSQL文で取得できます。
select current_timestamp, getdate(), getutcdate()
現在日付と比較する Select文の例:
select * from M_TABLE where begin_date <= convert(varchar,current_timestamp,112)
and end_date >= convert(varchar,current_timestamp,112)
※convertで日付を文字列に変換できる。
convert(varchar,current_timestamp,111) -> 2014/05/01
convert(varchar,current_timestamp,112) -> 20140501
convert(varchar,current_timestamp,120) -> 2014-05-01 00:00:00
(SQL Server)