2008年5月22日木曜日

【Transact-SQL】四捨五入・切捨て(ROUND関数)

--切捨て
PRINT '--------------------'
PRINT '切捨て'
PRINT '--------------------'
PRINT ROUND(555.55,2,1) --小数点第二位まで
PRINT ROUND(555.55,1,1) --小数点第一位まで
PRINT ROUND(555.55,0,1) --
PRINT ROUND(555.55,-1,1)--1の位
PRINT ROUND(555.55,-2,1)--10の位
--四捨五入の確認
PRINT '--------------------'
PRINT '四捨五入の確認'
PRINT '--------------------'
PRINT ROUND(555.54,1) --小数点第二位が4で切り捨て
PRINT ROUND(555.55,1) --小数点第二位が5で切り上げ


【結果】
--------------------
切捨て
--------------------
555.55
555.50
555.00
550.00
500.00
--------------------
四捨五入の確認
--------------------
555.50
555.60

2008年5月19日月曜日

【SQL】table1に存在しないIDのデータをtable2より取得する

--【table1に存在しないIDのデータをtable2より取得する】
-- table2とtable1をLEFT JOINで連結し、
-- table2から、tabel1.id=table2.idの条件でtable1.idがNULLのデータを取得する
--例)データ
------table1 | table2
--[id]  1   |  1
--[id]  2   |  2
--[id]  3   |  3
--[id]  4   |  4
--[id] NULL |  5
--[id] NULL |  6
-- LEFTJOINなので、table1に存在しないidはNULLになる

SELECT DEST.[id],DEST.[key]
FROM [test].[dbo].[table2] DEST
LEFT JOIN [test].[dbo].[table1] SRC
ON DEST.[id]=SRC.[id]
WHERE SRC.[id] IS NULL

【結果】
id key
----------- ----------
5 data_2_5
6 data_2_6

(2 行処理されました)

【SQL】重複した行を取り出す

--テーブルからフィールドAの値が重複しているデータを取り出す。
--手順:
--①GROUP BYでフィールドAを指定し、HAVING句を用いて
-- COUNT()の結果が2以上のデータのリストを取得する。
-- 例)リストの取得方法
SELECT [key]
FROM [test].[dbo].[tbl_union1]
GROUP BY [key]
HAVING COUNT([key])>1

--②①で取得したリストに入っているデータをテーブルから取得する。
SELECT [key]
FROM [test].[dbo].[tbl_union1]
WHERE [key] in
(SELECT [key]
FROM [test].[dbo].[tbl_union1]
GROUP BY [key]
HAVING COUNT([key])>1)

【結果】
key
----------
union1_3
union1_3
union1_3

(3 行処理されました)

2008年5月14日水曜日

【Transact-SQL】条件式とループ処理(IF-ELSE, WHILE)

--WHILEによるループ処理とIF-ELSEによる条件分岐
DECLARE @cnt INT
SET @cnt = 0

WHILE @cnt < style="color: rgb(0, 153, 0);">--ループ処理の中身はBEGIN-ENDで囲む
BEGIN
IF @cnt = 0
--条件によって実行される処理が複数の場合はBEGIN-ENDで囲む
BEGIN
Print '複数行実行開始'
Print '@cnt = 0'
Print '複数行実行終了'
END
ELSE IF @cnt = 1
BEGIN
Print '複数行実行開始'
Print '@cnt = 1'
Print '複数行実行終了'
END
--条件によって実行される処理が1つの場合はBEGIN-ENDは必要ない
ELSE IF @cnt = 2
Print '@cnt = 2'
ELSE
Print 'Else'
SET @cnt = @cnt +1
END -- End of WHILE Statement

【結果】
複数行実行開始
@cnt = 0
複数行実行終了
複数行実行開始
@cnt = 1
複数行実行終了
@cnt = 2
Else
Else