星期日, 1月 29, 2012

[VFP] Automation 應用 - 改變 Excel 儲存格顏色

利用顏色來突顯資料重要性,方便使用者聚焦在關鍵資料上。
// 設定字型顏色
loExcel.ActiveSheet.cells(lnRows,lnColumns).Font.ColorIndex = lnColorIndex
// 設定背景顏色
loExcel.ActiveSheet.cells(lnRows,lnColumns).Interior.ColorIndex = lnColorIndex
  • lnColorIndex 參考圖
ColorIndex Table

星期五, 1月 20, 2012

[SQL] UPDATE 搭配 FROM 使用

發現 UPDATE 的一個情況,經過測試和查閱 MSDN 後,才發現原來 UPDATE 搭配 FROM 使用時,必須注意下列這點。
擷取 MSDN UPDATE 內容,內容如下:
指定 FROM 子句來提供更新作業的準則時,請特別小心。如果 UPDATE 陳述式包括 FROM 子句,且這個 FROM 子句的指定方式並非每個更新的資料行項目都只能使用一個值,也就是說,如果 UPDATE 陳述式不具決定性,UPDATE 陳述式的結果便未定義。這可能會造成非預期的結果。
簡單說就是, 透過 UPDATE 搭配 FROM 使用時,資料必須是 1 對 1 的情況,假如是 1 對 多 , UPDATE 沒有辦法分辨要選擇哪一筆資料來更新。
DECLARE @table1 table (MtNO char(12),Qty numeric(10,2)) -- 庫存總表
DECLARE @table2 table (MtNO char(12),Qty numeric(10,2)) -- 入領料表
INSERt INTO @table1 VALUES ('A',0)
INSERt INTO @table2 VALUES ('A',50)
INSERt INTO @table2 VALUES ('A',30)
INSERt INTO @table2 VALUES ('A',20)
INSERt INTO @table2 VALUES ('A',10)

-- 把 @table2 (入領料表)內的 A 物料數量更新到 @table1(庫存總表)
UPDATE T1 SET T1.Qty = T2.Qty
FROM @table1 AS T1 
  JOIN @table2 AS T2 ON T1.MtNO = T2.MtNO

-- 顯示更新後的 @table1 (庫存總表)
SELECT * FROM @table1

星期五, 1月 13, 2012

[Challenge] Pair-wise and ordered assignment of objects from two different lists

Beyond Relational TSQL Challenge 1;不是很了解規則解釋甚麼,瞭解提供的資料和希望產生的結果,就開始動手 Try 啦。
  • 資料來源:
-- Bird Table
Code Name
---- -------
1    Pigeon
2    Sparrow
3    Parrot
-- Grain Table
Code Grain
---- ------
1    Wheat
1    Rice
2    Corn
2    Millet
-- Fruit Table
Code Fruit
---- ------
1    Banana
1    Mango
1    Guava
2    Grapes
  • 結果
Code Bird    Grain  Fruit
---- ------- ------ ------
1    Pigeon  Rice   Banana
1    Pigeon  Wheat  Guava
1    Pigeon  NULL   Mango
2    Sparrow Corn   Grapes
2    Sparrow Millet NULL
3    Parrot  NULL   NULL
  • 規則
    1. For a bird with no food basket at all, a single line should be output with the Grain and Fruit columns containing null.
    2. The output should be ordered by Code followed by the order in which the Grain/Fruit pairs were extracted from the Grains/Fruits tables.

星期五, 1月 06, 2012

[SQL] 數學運算-小數

小數位數的四捨五入(Round Off)、無條件進位(Round Up)和無條件捨去(Round Down),要如何利用 T-SQL 語法達到此效果。

    ROUND(numeric_expression , length [ ,function ]) 函數
  • 函數說明:傳回數值,捨入到指定的長度或有效位數。
  • numeric_expression 參數: 這是精確數值或近似數值資料類型類別目錄的運算式,但 bit 資料類型除外。
  • length 參數:這是 numeric_expression 捨入的有效位數。length 必須是 tinyint、smallint 或 int 類型的運算式。當 length 是正數時,numeric_expression 會捨入到 length 所指定的十進位數。當 length 是負數時,numeric_expression 會依照 length 所指定,在小數點左側捨入。
  • function 參數:這是要執行的作業類型。function 必須是 tinyintsmallintint。當省略 function,或其值為 0 (預設值) 時,會捨入 numeric_expression。當指定 0 以外的值時,會截斷 numeric_expression。 
  • 上述 MSDN 說明中,捨入是指四捨五入、截斷是指無條件捨去

    CEILING() 函數
  • 函數說明:傳回大於或等於指定數值運算式的最小整數。

-- 範例說明:對小數第二位進行,四捨五入、無條件捨去和無條件進位

SELECT 
    T.Number AS '數字',
    ROUND(T.Number,2) AS '四捨五入',
        -- ROUND() 的基本使用
    ROUND(T.Number,2,1) AS '無條件捨去',
        -- 指定 ROUND() 的 function 參數不為 0 ,則會進行無條件捨去
    CEILING(T.Number * 100) / 100 AS '無條件進位'  
        -- 利用 CEILING() 來達到此效果,
        -- 假如是要針對小數第三位則乘 1000 ,除1000。
FROM
  (
      SELECT 100.129 AS Number
      UNION ALL
      SELECT 100.126
      UNION ALL
      SELECT 100.125
      UNION ALL
      SELECT 100.124
      UNION ALL
      SELECT 100.120
  ) AS T
[SQL] 數學運算-小數