T-SQL

Last-modified: 2024-04-02 (火) 17:10:11

Transact-SQL

基本情報

  • 対応状況
    SQL Server 2005 , SQL Server 2008 , SQL Server 2000でも動いたよ。
    パスワードは空パスでは駄目のようだ。絶対パスワードが設定してあること。
 
amazon.gif
 

初期設定/エラー情報

  • SSMS で「変更の保存が許可されていません」というエラー メッセージが表示される 参考
    原因:SQL Server Management Studio で [テーブルの再作成が必要になる変更を保存しない] オプションが既定で有効になっているため
    対策:
    1.SQL Server Management Studio を開きます。
    2.[ツール] メニューの [オプション] をクリックします。
    3.[オプション] ウィンドウのナビゲーション ウィンドウで、[デザイナー] をクリックします。
    4.[テーブルの再作成が必要になる変更を保存しない] チェック ボックスをオンまたはオフにして、[OK] をクリックします。

サンプル

  • 今日の日付から2か月前の伝票番号を求める
DECLARE @Ymd nchar(6); -- 西暦 YYMMDD
DECLARE @PickNo nchar(11);
DECLARE @MonthAgo datetime;
  • 今日から2ヶ月前のPickNo求める
set @MonthAgo = dateadd(mm,-2,GETDATE())
set @Ymd = CONVERT(varchar, @MonthAgo, 12)
set @PickNo = @Ymd + '00000'
print @PickNo
  • 求めたPickNo以前のデータをテーブルを削除する
    DELETE FROM [PickDB].[dbo].[BoxListDB] Where PickNo < @PickNo
    DELETE FROM [PickDB].[dbo].[JusinDB] Where PickNo < @PickNo
    DELETE FROM [PickDB].[dbo].[FG_PickNo] Where PickNo < @PickNo
    DELETE FROM [PickDB].[dbo].[janDB] Where PickNo < @PickNo
結果:11090100000(2011/11/01の場合)
  • 移動平均(Null未対応)参考
    販売数の今日から過去10日のVol平均
    SELECT saledate
    ,code
    ,AVG(vol) OVER(ORDER BY saledate ROWS BETWEEN 10 preceding AND  current row) AS "販売数の10日平均"
    FROM sample
  • over partition by の使い方
    select
     年
    ,年月
    ,出費
    ,sum(出費) over(partition by 年 order by 年月
                    rows between 1 preceding and 1 preceding ) as "1行前の出費"
    ,sum(出費) over(partition by 年 order by 年月
                    rows between 1 following and 1 following ) as "1行後の出費"
    ,count(*)  over(partition by 年 order by 年月
                    rows between unbounded preceding and current row) as "現在の行数"
    ,count(*)  over(partition by 年 order by 年月
                    rows between 1 following and unbounded following ) as "残り行数"
    from データ;
  • 最大値のあるレコードの列項目を参照する方法 参考
  • ROW_NUMBER() の使い方
    グループごとに連番を振りなおす
    SELECT
    *  , ROW_NUMBER() OVER(PARTITION BY day1 ORDER BY day1,gengetu desc) Num
    FROM [Kato].[dbo].[g]
    order  by day1,Gengetu desc

実行結果例

CdGengetuDay1End1Vol1Num
591Dec-242024/2/9976351301
591Oct-242024/2/997582782
591Aug-242024/2/99761363
591Jun-242024/2/99761374
591Apr-242024/2/9976115
591Feb-242024/2/99750206
  • 前行のデータを表示する
    Select  日付, 始値
    ,Lag(日付,1) OVER ( ORDER BY 日付) as '前日'
    ,Lag(始値,1) OVER ( ORDER BY 日付) as '前日225始値'
    From Nk225

DB設定関係

  • バックアップ
    BACKUP DATABASE PickDB TO DISK = N'D:\BACKUP\PickDB.BAK' WITH INIT
  • インデックス再構成
USE [PickDB] ' DB指定
GO
SET STATISTICS TIME ON
'インデックス再構成
ALTER INDEX [Index_janDB] ON [dbo].[janDB] REORGANIZE WITH ( LOB_COMPACTION = ON )
ALTER INDEX [Idx_JusinDB] ON [dbo].[JusinDB] REORGANIZE WITH ( LOB_COMPACTION = ON )
ALTER INDEX [index_BoxListDB] ON [dbo].[BoxListDB] REORGANIZE WITH ( LOB_COMPACTION = ON )
ALTER INDEX [PK_FG_PickNo] ON [dbo].[FG_PickNo] REORGANIZE WITH ( LOB_COMPACTION = ON )
ALTER INDEX [IX_FG_PickNo] ON [dbo].[FG_PickNo] REORGANIZE WITH ( LOB_COMPACTION = ON )
ALTER INDEX [Idx_sZMMAKER] ON [dbo].[sZMMAKER] REORGANIZE WITH ( LOB_COMPACTION = ON )
ALTER INDEX [Idx_sZMHIN] ON [dbo].[sZMHIN] REORGANIZE WITH ( LOB_COMPACTION = ON )
SET STATISTICS TIME OFF
GO

参考・読み物

参考書籍

 
amazon.gif

サイト内リンク

SQL Server系

その他DB系

その他

 
 
amazon.gif