MW211 EXIT

devlog
MSSQL/文字型
2015年01月07日
基本的な文字型には以下の種類がある(固定か?可変か?、半角か?全角か?)
  ・「char」型      (固定長半角)
  ・「nchar」型     (固定長全角)
  ・「varchar」型   (可変長半角)
  ・「nvarchar」型  (可変長全角)

・固定長(「var」なし)の場合は、その決まった長さまで末尾に空白が埋められる。
・半角(「n」なし)の場合でも、全角は使えるが「Shift-JIS」レベルまでで
  「Unicode」系(「UTF-8」など)は使えない。
・半角の最大は8000バイト、全角の最大は4000文字
  #「1文字=2バイト」の関係であれば同じということ
    Unicode系の「1文字=3バイト」だと全角の方が「12000バイト」となり
    有利だが、そもそも半角の方はUnicodeをサポートしていない

なお、文字数が大量になった場合は、以下の特殊な型を使うことになる
  ・「varchar(max)」型   (長文半角)  …旧「text」型
  ・「nvarchar(max)」型  (長文全角)  …旧「ntext」型
分類:MSSQL
MSSQL/インスタンスの削除
2015年01月03日
インスタンス(「\SQLEXPRESS」とかのパス)を削除するには
Windows「コントロールパネル」の「プログラムと機能」で
右クリックメニュー「アンインストールと変更」を選択し、
「追加」・「修復」・「削除」の中から「削除」を選び、
その先で特定のインスタンスを選択して削除処理を進めればよい。
分類:MSSQL
MSSQL/キーを集約
2015年01月02日
キーに「-xxx」的な枝番がついていて、これらを横断して枝番なしの集約キーで
合計を取りたい場合。

まず、文字列操作で集約キーを求めるには以下のような感じになる。
┌──────────────────────────────────────┐
│SELECT CASE                                                                 │
│         WHEN CHARINDEX('-', [キー]) > 0 THEN                               │
│           SUBSTRING([キー], 0, CHARINDEX('-', [キー]))                     │
│         ELSE                                                               │
│           [キー]                                                           │
│       END AS [集約キー]                                                    │
│    FROM [表]                                                               │
└──────────────────────────────────────┘
「CHARINDEX('-', [キー])」で「-」の位置を求める。
なければ「0」なので、別途、キーをそのままとする。
あったら、そこまでを「SUBSTRING([キー], 0, ~)」で抽出する。
(Excel関数の「mid()」みたいなもんだ)

ということで、こいつらをSELECT、GROUP BY、ORDER BYに展開するとできあがり。
┌──────────────────────────────────────┐
│SELECT CASE                                                                 │
│         WHEN CHARINDEX('-', [キー]) > 0 THEN                               │
│           SUBSTRING([キー], 0, CHARINDEX('-', [キー]))                     │
│         ELSE                                                               │
│           [キー]                                                           │
│       END AS [集約キー],                                                   │
│       SUM([値]) AS [合計]                                                  │
│    FROM [表]                                                               │
│    GROUP BY CASE                                                           │
│               WHEN CHARINDEX('-', [キー]) > 0 THEN                         │
│                 SUBSTRING([キー], 0, CHARINDEX('-', [キー]))               │
│               ELSE                                                         │
│                 [キー]                                                     │
│             END                                                            │
│    ORDER BY CASE                                                           │
│               WHEN CHARINDEX('-', [キー]) > 0 THEN                         │
│                 SUBSTRING([キー], 0, CHARINDEX('-', [キー]))               │
│               ELSE                                                         │
│                 [キー]                                                     │
│             END ASC                                                        │
└──────────────────────────────────────┘
分類:MSSQL
Excel/分析ツールの設定方法
2015年01月01日
「オプション>アドイン」で「Excelアドイン設定」を実行し、
以下にチェックボックスを入れる。
  ■「分析ツール」
  ■「分析ツール - VBA」

すると、「データ」に(「分析」の)「データ分析」というメニューが追加されるので
そこから各機能を選択して実行する。
  □分散分析
  □相関
  □共分散
  □基本統計量
  □指数平滑
  □F検定
  □フーリエ解析
  □ヒストグラム
  □移動平均
  □乱数発生
  □順位と百分位数
  □回帰分析
  □サンプリング
  □t検定
  □z検定
分類:Excel
設計/法律用語の入れ子
2014年12月30日
「または」と「もしくは」の関係は以下の通り。
┌───────────────────┬──────────────────┐
│■または■                            │■ or ■                            │
├───────────────────┼──────────────────┤
│■、■または■                        │■ or ■ or ■                      │
├───────────────────┼──────────────────┤
│      (■もしくは■)                  │   (■ or ■)                       │
│または(■もしくは■)                  │or (■ or ■)                       │
├───────────────────┼──────────────────┤
│      (        (■もしくは■)         │   (   (■ or ■)                   │
│       もしくは(■もしくは■))        │    or (■ or ■))                  │
│または(        (■もしくは■)         │or (   (■ or ■)                   │
│       もしくは(■もしくは■))        │    or (■ or ■))                  │
└───────────────────┴──────────────────┘
分類:設計
MSSQL/文字列照合(続)
2014年12月29日
照合順序の確認と設定について。

(全体の)既定の照合順序を確認する。
┌──────────────────────────────────────┐
│SELECT SERVERPROPERTY('COLLATION')                                          │
└──────────────────────────────────────┘

特定のDBについて、既定の照合順序を確認する。
┌──────────────────────────────────────┐
│SELECT DATABASEPROPERTYEX(DB名, 'COLLATION')                                │
└──────────────────────────────────────┘

照合順序(JAPANESE_CS_AS_KS_WS)を特定のDBに対して設定する。
┌──────────────────────────────────────┐
│ALTER DATABASE DB名 COLLATE JAPANESE_CS_AS_KS_WS;                           │
└──────────────────────────────────────┘
分類:MSSQL
MSSQL/連番をふる
2014年12月27日
ある列([順番])を基準として並び替えた場合に、連番を1から振り直すUPDATE文。
しかも、特定のグループごと([組No])に振るという条件も加わった場合。

以下の様な感じになる。
┌──────────────────────────────────────┐
│UPDATE [表]                                                                 │
│    SET [連番] = (                                                          │
│        SELECT [連番]                                                       │
│            FROM (                                                          │
│                SELECT [組No],                                              │
│                       [順番],                                              │
│                       ROW_NUMBER() OVER(PARTITION BY [組No]                │
│                                         ORDER BY [順番] ASC) AS [連番]     │
│                    FROM [表]                                               │
│            ) AS [入力D]                                                   │
│            WHERE [入力D].[組No] = [表].[組No]                             │
│              AND [入力D].[順番] = [表].[順番]                             │
│    );                                                                      │
└──────────────────────────────────────┘

これを一歩すすめて早めに抽出を行うと以下のような感じになる。
┌──────────────────────────────────────┐
│UPDATE [表]                                                                 │
│    SET [連番] = (                                                          │
│        SELECT [連番]                                                       │
│            FROM (                                                          │
│                SELECT [入力D].[順番],                                     │
│                       ROW_NUMBER() OVER(ORDER BY [入力D].[順番] ASC)      │
│                                                                   AS [連番]│
│                    FROM [表] AS [入力D]                                   │
│                    WHERE [入力D].[組No] = [表].[組No]                     │
│            ) AS [入力D]                                                   │
│            WHERE [入力D].[順番] = [表].[順番]                             │
│    );                                                                      │
└──────────────────────────────────────┘
分類:MSSQL
SQL/相関副問い合わせの階層
2014年12月26日
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 親表                                                               │
│    WHERE EXISTS (                                                          │
│        SELECT * FROM (                                                     │
│          SELECT * FROM (                                                   │
│            SELECT * FROM (                                                 │
│              SELECT * FROM (                                               │
│                SELECT * FROM (                                             │
│                  SELECT * FROM (                                           │
│                    SELECT * FROM (                                         │
│                      SELECT * FROM (                                       │
│                          SELECT *                                          │
│                              FROM 子表                                     │
│                              WHERE 子表.列 = 親表.列                       │
│                      ) AS [a]                                              │
│                    ) AS [a]                                                │
│                  ) AS [a]                                                  │
│                ) AS [a]                                                    │
│              ) AS [a]                                                      │
│            ) AS [a]                                                        │
│          ) AS [a]                                                          │
│        ) AS [a]                                                            │
│    );                                                                      │
└──────────────────────────────────────┘
上記のようなのもいける。

親表は、子表が深くても効くようだ。
分類:SQL
ExcelVBA/マクロを起動しない
2014年12月25日
マクロを実行しないでExcelを起動する

→Shiftを押しながら起動する


マクロを強制中断する

→Ctrlを押しながらPauseを押す
分類:ExcelVBA
Excel/明細から小計明細をつくる
2014年12月24日
明細一覧から、グループ単位の小計の一覧明細をつくりたい場合、
ピボットテーブルだとちょっとくせがある。
Excelマクロを使ってしまうのも手だが、Excel機能を駆使しして実現する方法。

(1) 明細シートを複写する(以後、「小計シート」とする)

(2) 小計シートで、キーを基準に明細を抽出する
    →「データ>重複の削除」で、キーを選択し、
      キーが重複しないように明細を抽出する
      #キー以外の列については、一件目の内容が残るので、
        誤解を避けるために適宜クリアする

(3) 集計する列にSUMIFS関数を入れれば出来上がり
    例)キーがA列とB列で、集計する列がC列の場合、
        二行目の集計する列に以下のような数式を入力し、コピーで三行目以降に展開
        「=SUMIFS(明細!C:C,明細!A:A,A2,明細!B:B,B2)」
分類:Excel
前へ 1 … 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 … 156 次へ