TableAとTableBを結合した結果を使ってTableA内の値を更新
(別のテーブルの値を使って値を更新)
UPDATE a SET a.a1 = b.a2
FROM TableA AS a
INNER JOIN TableB AS b ON a.ID1 = b.ID1
TableAとTableBを結合した結果を使ってTableA内の値を更新
(別のテーブルの値を使って値を更新)
UPDATE a SET a.a1 = b.a2
FROM TableA AS a
INNER JOIN TableB AS b ON a.ID1 = b.ID1
一時テーブル,テーブル変数,共通テーブル式(CTE)の使い方
一時テーブル
— 一時テーブルはtempdbに格納される
— 名前の先頭に#1つ:ローカル一時テーブル(セッション内のみ)
— 名前の先頭に#2つ:グローバル一時テーブル(全ユーザーが使用可)
— 一時テーブル作成
SELECT *
INTO #tempA –グローバル一時テーブルの場合は ##tempA
FROM table1
— 何らかの処理
SELECT * FROM #tempA
— 一時テーブル削除
–通常は自動的に削除されるので必要ないがManagement Studioのクエリウインドウなどで繰り返し実行するときは必要
DROP TABLE #tempA
テーブル変数
— 宣言されたスコープ内で有効
— テーブル変数宣言(定義)
Declare
@T1 Table(
ID int identity(1,1) –ID用に1から順番に番号を付けたい場合
, a1 int
, a2 nvarchar(50)
, PRIMARY KEY (a1)
)
— テーブル変数にデーターを挿入(SELECT ~ INTO文は使用できない)
INSERT INTO @T1 (a1, a2)
SELECT a1, a2
FROM table1
— 何らかの処理(FROM句以外では別名を使用する必要がある)
SELECT * FROM @T1 AS T
— 自動的に削除されるので削除の必要はない
共通テーブル式(CTE)
SELECT文が入れ子になってわけがわからなくなるのを防げる
;WITH CTE1 (a1, a2)
AS
(
SELECT a1, a2
FROM Table1
GROUP BY a1, a2
–CTE内では ORDER BY は使えない
)
SELECT T1.a1, T2.b1
FROM CTE1 AS T1
INNER JOIN Table2 AS T2 ON T1.a1 = T2.a1
ORDER BY T1.a1
–CTEは直後のクエリーでしか使えないので以降のクエリーではエラーとなる
SELECT * FROM CTE1 –エラー
–カンマで区切れば連続してCTEを参照できる
;WITH
CTE1 (a1, a2)
AS
(
SELECT a1, a2
FROM Table1
GROUP BY a1, a2
),
CTE2 (b1, b2)
AS
(
SELECT MIN(a1), MAX(a2)
FROM CTE1 –CTE2の中でCTE1を使用
)
SELECT b1, b2
FROM CTE2
参考:
テーブルの作成と変更の基礎(MSDN)
共通テーブル式(MS)
共通テーブル式の使用(MSDN)
Updated:
2009-12-10 共通テーブル式を追加.
座標位置から画面上のピクセル位置を取得,ピクセル位置からグラフ上の座標位置を取得など (TeeChart Pro 8.06)
uessに TeEngineを追加
procedure TForm1.GetPosInfo;
var
i, XPos, YPos: Integer;
XVal, YVal: Double;
str1: String;
begin
//Seriesのデーター点インデックスから点の値とピクセル位置を取得 =====
i := Series1.FirstValueIndex;//最初の点のインデックス(LastValueIndexは最後の点)
//データー点の値を取得
XVal := Series1.XValue[i];
YVal := Series1.YValue[i];
//データー点の画面上のピクセル位置を取得
XPos := Series1.CalcXPos(i);
YPos := Series1.CalcYPos(i);
str1 := ‘[Point index ‘ + IntToStr(i) + ‘]’;
str1 := str1 + #13#10;
str1 := str1 + ‘Value =(‘ + FloatToStr(XVal) + ‘, ‘ + FloatToStr(YVal) + ‘)’;
str1 := str1 + #13#10;
str1 := str1 + ‘Pixel =(‘ + IntToStr(XPos) + ‘, ‘ + IntToStr(YPos) + ‘)’;
str1 := str1 + #13#10;
//ウインドウのピクセル位置からグラフ上の座標位置を取得 =====
//ピクセル位置100, 100の座標を取得
XPos := 100;
YPos := 100;
XVal := Series1.XScreenToValue(XPos);
YVal := Series1.YScreenToValue(YPos);
str1 := str1 + #13#10;
str1 := str1 + ‘[Pixel (‘ + IntToStr(XPos) + ‘, ‘ + IntToStr(YPos) + ‘)]’;
str1 := str1 + #13#10;
str1 := str1 + ‘Value =(‘ + FloatToStr(XVal) + ‘, ‘ + FloatToStr(YVal) + ‘)’;
str1 := str1 + #13#10;
//グラフ上の座標位置からウインドウのピクセル位置を取得 =====
//座標10.0, 5.0のピクセル位置を取得
XVal := 10.0;
YVal := 5.0;
XPos := Series1.CalcXPosValue(XVal);
YPos := Series1.CalcYPosValue(YVal);
str1 := str1 + #13#10;
str1 := str1 + ‘[Value (‘ + FloatToStr(XVal) + ‘, ‘ + FloatToStr(YVal) + ‘]’;
str1 := str1 + #13#10;
str1 := str1 + ‘Pixel = (‘ + IntToStr(XPos) + ‘, ‘ + IntToStr(YPos) + ‘)’;
str1 := str1 + #13#10;
ShowMessage(str1);
end;