2011-03-31

MS-SQL:查詢資料庫所有table的筆數、大小

在Google大神及網路上各先拜的幫助下,新學會以下兩個MS-SQL內建的預存程序:

查詢資料庫所有table的筆數:

    EXEC sp_MsForEachTable 'SELECT ''?'', COUNT(*) FROM ?'

查詢資料庫所有table的大小:

    EXEC sp_MsForEachTable "Sp_SpaceUsed '?'"

p.s.以上的那些問號,系統在執行時會辨別成當下所使用的資料庫名稱

2011-03-30

MS-SQL:將資料分組並比較資料大小

通常,我們將資料分組並且比較大小(如圖一整理成圖二),可以結合ORDER BY、GROUP BY,一個語法簡單搞定。如下所示:

                                               《圖一.資料原始檔》


原始資料如下:
    select title,val,note from data_compare

分組並按大→小排列:
    SELECT title,val,note FROM data_compare
    ORDER BY title, val desc

                                               《圖二.整理後資料》

但如果是需要用其它文字代替比較出來的結果(如圖三所示),那可能有點麻煩…


                                             《圖三.用其它文字代替比較出來的結果》

使用cursor一筆一筆處理解決似乎是不錯的辦法,但考慮到日後資料量變得龐大及其轉檔效能,這就變成最後的手段了。
在此提供另一種方式:
構想:
    1.先將各組最大值及最小值分別取出放入暫存table#A、#B
    2.排除最大值及最小值取出剩餘資料,即為中間值
    3.將要替代的文字一一放入最大值、最小值、中間值資料表,UNION ALL,完成!
程式碼如下:

SELECT distinct title, maxval=MAX(val)
into #A
FROM data_compare
GROUP BY title

SELECT distinct title, minval=MIN(val)
into #B
FROM data_compare
GROUP BY title

SELECT distinct data_compare.title, '棒' as val, data_compare.note
FROM data_compare
JOIN #A ON data_compare.title=#A.title
JOIN #B ON data_compare.title=#B.title
WHERE data_compare.val=#A.maxval and data_compare.title=#A.title
UNION ALL
SELECT distinct data_compare.title, '不錯' as val, data_compare.note
FROM data_compare
JOIN #A ON data_compare.title=#A.title
JOIN #B ON data_compare.title=#B.title
WHERE (data_compare.val<>#A.maxval and data_compare.title=#A.title) and (data_compare.val<>#B.minval and data_compare.title=#B.title)
UNION ALL
SELECT distinct data_compare.title, '加油' as val, data_compare.note
FROM data_compare
JOIN #A ON data_compare.title=#A.title
JOIN #B ON data_compare.title=#B.title
WHERE data_compare.val=#B.minval and data_compare.title=#B.title

2011-03-20

JAVA 關於遞增/遞減 運算子的前置與後置

前置:++a ;
後置:a++ ;
就變數運算結果看來,a++與++a,所得到的值完全相同,那麼,為什麼要分這兩種呢?
因為在程式執行,產生的結果並不相同;
舉例:宣告兩個整數變數a和b,並初始化,如下所示:
             int a=1 ;
             int b=1 ;
接下來,我們在程式運算時,分成兩種情況:

1.若指定:
             b = a++ ;
   再讓系統分別顯示變數 a、b的值,得到的結果如下:
             a = 2;b = 1。
   即運算中,由於變數 b 在“=“的右方會先碰到變數a,所以此時的 “=” 會系統解讀成「指
   向」的作用,所以變數 b被指向成了變數 a(此時變數a還沒做任何運算),所以:
             b = a = 1;
   而後,變數 a再行遞增運算:a = a+1 = 2。

2.若是我們指定:
             b= ++a ;

    再讓系統分別顯示變數 a、b的值,得到的結果如下:
             a = 2;b = 2。
    即運算中,由於變數 b 在“=“的右方會先碰到遞增運算式「++」,所以此時的 “=” 會系統
    解讀成「運算」,所以:
             b = a+1 = 2。

2011-03-08

JAVA 變數設定

變數宣告
  • 語法
    資料型態  變數名稱
    • //方式1 先定義型態,再定義初始值
      int x;
      x = 100
      //方式2 宣告同時初始化變數
      int y = 200;
  • 命名規則
    • 1.英文 or $ 開頭
      2.不得為java關鍵字
      3.字母大小寫有別
      4.可 [英文] + [數字] + [ _ ] 來命名;ex:String car_1;