利用 Values 來簡化範例製作和 ParseName 函數的應用
最近有些時候會做一些 SQL 的 Lab ,有些時候做 Lab 比較麻煩的就是要有資料,因此在以往的時候,可能我們會用 CTE 搭配 UNION ALL 的方式來做
with T1 as
(
select 'A' as F1, 1 as F2
union all
select 'A' as F1, 2 as F2
union all
select 'B' as F1, 1 as F2
union all
select 'B' as F1, null as F2
)
select F1, sum(F2),count(F2) from T1 group by F1
這樣寫起來雖然可以,但有些時候要比較多資料來做測試的時候,寫起來就稍嫌麻煩了,因此這個時候可以搭配 values 來做處理,把上述的範例改成類似以下的寫法
select F1, SUM(F2),COUNT(F2)
from
( values ('A',1),('A',2),('B',1),('B',null)) as T1(F1, F2)
GROUP BY F1
會用到上面這個範例,主要是剛好有同事在詢問 STRING_SPILT 的函數使用,雖然在 Azure SQL Database 和 SQL Server 2016 都有提供這個函數,但比較大的缺點是目前這個函數只能處理一個分隔符號,因此如果你要處理多個的時候,或許可以參考下面的範例,利用 PARSENAME 的部分來處理,這個函數本來是用在做名稱或 IP 用 . 分隔的時候來做拆解,因此如果有特別需要的時候,可以把資料的分隔符號置換成 . ,就也可以拿這個函數來使用了。
select F1, PARSENAME(F1,3), PARSENAME(F1,2), PARSENAME(F1,1)
from
( values ('A.BBB.X'),('A.CCC.Y')) as T1(F1)