星期五, 3月 30, 2012

[Challenge] 尋找數列中最接近的號碼

Beyond Relational TSQL Beginners Challenge 5

  • 資料來源
Numbers
-------
10
12
19
25
25
34
38 
  • 產生結果
Closest Number
--------------
25
  • 規則
    1. SQL Server 2005 以上的版本
    2. 產生結果的欄位名稱,必須是Closest Number
    3. 一定要使用次序函數

星期五, 3月 23, 2012

[Challenge] 補齊日期範圍內缺少的值

Beyond Relational TSQL Challenge 12

  • 資料來源
YearMonth   Score
----------- -----------
200903      100
200803      95
200802      99
200801      100
200711      100
  • 產生結果
YearMonth   Score
----------- -----------
200908      100
200907      100
200906      100
200905      100
200904      100
200903      100
200902      95
200901      95
200812      95
200811      95
200810      95
200809      95
200808      95
200807      95
200806      95
200805      95
200804      95
200803      95
200802      99
200801      100
200712      100
200711      100
  • 規則
    1. Create a new couple year/month for each missing month between two valid months of the original table
    2. For each new couple created, you should recopy the score of the last month he played.
    3. Continue the list until the current month (included).

星期五, 3月 09, 2012

[VFP] Automation 應用 - 判斷 Excel 版本

TRY
  loExcel = CREATEOBJECT("Excel.Application")
  IF VARTYPE(loExcel) = "O"

     lcExcelVersion = ALLTRIM(loExcel.APPLICATION.NAME)
     lnExcelVersion = VAL(loExcel.APPLICATION.VERSION)
  
     DO CASE
     CASE lnExcelVersion = 14
          lcExcelVersion = lcExcelVersion + " 2010"
     CASE lnExcelVersion = 12
          lcExcelVersion = lcExcelVersion + " 2007"
     CASE lnExcelVersion = 11
          lcExcelVersion = lcExcelVersion + " 2003"
     CASE lnExcelVersion = 10
          lcExcelVersion = lcExcelVersion + " XP"
     CASE lnExcelVersion = 09
          lcExcelVersion = lcExcelVersion + " 2000"
     CASE lnExcelVersion = 08
          lcExcelVersion = lcExcelVersion + " 97"
     OTHERWISE
          lcExcelVersion = lcExcelVersion + " " + ALLTRIM(STR(lnExcelVersion))
     ENDCASE
  
     lnExcelVersion = loExcel.APPLICATION.International(1)
     DO CASE
     CASE lnExcelVersion = 1
          lcExcelVersion = lcExcelVersion + " 英文版"
     CASE lnExcelVersion = 886
          lcExcelVersion = lcExcelVersion + " 繁體中文版"
     CASE lnExcelVersion = 86
          lcExcelVersion = lcExcelVersion + " 簡體中文版"
     OTHERWISE
          lcExcelVersion = lcExcelVersion + " 非英繁簡版(其國碼=" + ALLTRIM(STR(lnExcelVersion)) + ")"
     ENDCASE
    
     loExcel.QUIT
  ENDIF
CATCH
  -- 不產生任何錯誤訊息
  lcExcelVersion = "沒有安裝 Excel 軟體"
ENDTRY 
MESSAGEBOX(lcExcelVersion) -- 顯示偵測 Excel 結果

星期五, 3月 02, 2012

[Challenge] 動態定位的欄位轉置

Beyond Relational TSQL Challenge 42

這個挑戰是關於把資料從 ROW 轉成 Column 的商業邏輯,這個應用程式管理員工工作時數,應用程式必須產生每一個員工工作時數資訊,讓其他應用程式來跑。工作時數被分類為一般工作時數、加班時數、假日時數等。
  • 資料來源
EmployeeID PayType PayHours
---------- ------- --------
10001      R       01:30
10001      R       05:15
10001      O       01:00
10001      H       01:30
10002      R       08:00
10002      I       01:00
10002      I       01:30
第一個欄位儲存員工工號。第二個欄位儲存付款類別。R 代表 一般工作時數、H 代表 假日等意義。每一個員工付款類別必須累加。產生的結果,每一個員工必須只有一個 ROW 資料。
  • 產生結果
Employee Code1 Pay1 Code2 Pay2 Code3 Pay3 Code4 Pay4
-------- ----- ---- ----- ---- ----- ---- ----- ----
10001    R     6.75 O     1.00 H     1.50       0.00
10002    R     8.00 I     2.50       0.00       0.00
  • 規則
    1. 有 R、O、I 和 H 四種付款類別。
    2. 每一種類別在每一個 ROW 中,必須產生 codeN 和 payN 欄位;codeN 欄位資料必須為付款類別、payN 欄位資料必須為時數。
    3. 來源資料表中的資料格式為 HH:MM,MM 這個部分只會是 00、15、30 和 45。
    4. 產生結果必須是數值形態, 15 分鐘必須用 0.25、30 分鐘必須用 0.5 來呈現,請以此類推。
    5. 每一個付款類別有其權重,權順序為 R、O、I、H,R 為最高、H 為最低。
    6. 最後結果必須根據其權重且付款類別必須和時數放在一起。
    7. 產生的結果必須根據員工編號來排序。
    8. 產生的結果假如是 0 , 必須為 0.00。