小提琴這裏舉例:http://sqlfiddle.com/#!3/419ec/3SQL: - 更換和UNPIVOT功能在查詢
SQL Server 2008的
我想知道是否有人可以請給我解釋一下什麼是下面的select查詢怎麼回事替換功能和unpivot功能。我是一個新手到SQL,我不明白這種類型的查詢的邏輯(解規範表)。
CREATE TABLE TableB
([date] datetime, [Id] int, [name] varchar(3), [blah1] varchar(4), [hour1] int, [hour2] int, [hour3] int, [hour4] int)
;
INSERT INTO TableB
([date], [Id], [name], [blah1], [hour1], [hour2], [hour3], [hour4])
VALUES
('2013-04-01 00:00:00', 1, 'Jim', 'test', 129, 343, 54, 89),
('2013-04-01 00:00:00', 2, 'Bob', 'rewe', 45, 6, 45, 2),
('2013-04-02 00:00:00', 3, 'Joe', 'fdf', 7, 8, 4, 3)
選擇查詢:
select date,
id,
name,
replace(MightMouse, 'hour', '') hour,
observationvalue
from tableB
unpivot
(
observationvalue
for MightMouse in (hour1, hour2, hour3, hour4)
) unpiv
我想替換函數的用法如下:
REPLACE (string_expression , string_pattern , string_replacement)
string_expression
http://msdn.microsoft.com/en-us/library/ms186862.aspx
由於每replace
函數的定義, string_expression是其中一個子串i的字符串s被搜索(子字符串可以是完整的字符串)。例如,
replace('mynameisjohn', 'john', '')
這將在string_expression mynameisjohn
搜索子串john
,並用空字符串替換,導致等於mynameis
的字符串。
但在上面的例子中,我不明白MightyMouse
是什麼。原表中沒有MightyMouse
。我也不知道unpivot部分如何在執行流程中適合查詢。
如果這是python例如有一個直觀的代碼邏輯流。使用SQL,看起來你可以構建醜陋的查詢,並且從sql的角度來看,事情工作得很好。但是從用戶的角度來看,很難分解查詢代碼不同部分發生的事情。
謝謝RBarry的詳細解釋。所以我想'MightMouse'列名根據替換(MightMouse,'hour','')小時聲明重新命名爲'hour' - 是否正確? – codingknob 2013-04-24 23:02:08
那麼'MightMouse'有一個列名「MightMouse」。被替換的是MightMouse列的*內容*,它們是從源列名稱('hour1,hour2,...')構建的。 – RBarryYoung 2013-04-24 23:29:41