星期二, 5月 20, 2014

SQL 縱向合併多欄位成一欄位

最近遇到不少資料庫不是我設計,但是我要維護頁面,而在資料庫的部份已經無法在更動了,即便正規化做的不好,反正只要大家都知道就好,不直觀也無所謂,

要來實作一個維護頁面,資料表如下,


這種樣子是很難閱讀,馬上看出各張 FormID 的權限,下面這種整理過的資料在呈現上也比較好閱讀,


本來以為要把資料全部丟到程式中去執行了,沒想到上網 Google 了一下就早到 SQL 就可以辦到了,


SELECT a.[FormID] ,left(a.[Authority],LEN(a.[Authority])-1) AS [Description] FROM
(SELECT [FormID],(SELECT CAST([AuthType] AS NVARCHAR ) + ',' FROM [FormAuth]
WHERE [FormId] = o.[FormId]
FOR XML PATH('')) AS [Authority]
FROM [FormAuth] o
GROUP BY [FormID]) a
ORDER BY [FormID]

省時又省力了

參考: http://weisnote.blogspot.tw/2012/12/t-sql.html

星期五, 5月 16, 2014

SQL Where 子句的 Like 使用 Under Line

最近要來抓每個 Table 的資料進行整理,

資料庫中有很多 Table 都是備份的,這一堆都不需要抓出來,

好在這些 Table 的名稱都有使用到 _ 來跟原本的 Table 作為識別,

所以本來想使用 SELECT [name] FROM sys.tables WHERE [name] NOT LIKE '%_%'

來選出 Table,結果這個 Where 有跟沒有一樣

後來找了好久才知道 SELECT [name] FROM sys.tables WHERE [name] NOT LIKE '%[_]%' 

要這樣用才能呀,原來 Under Line 是特殊字元,所以要特別處理。