我有一個指定產品的製造選項的列式表。每個選項可以是以下選項的一個子集('','B','L','R','BX','LX','RX)。該表有314列。 (這是一個遺留構建,而不是我今天做的方式......)如何過濾TSQL UNPIVOT中的值?
我有一個客戶請求來計算一個選項在日期範圍內使用的次數。獲得過濾數據不是問題,但是將面向列的錶轉換爲可計數的面向行的表正在挑戰我的透視/不透明技能。
我能得到這個列名(從http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx參考)
declare @cols nvarchar(max)
select @cols = coalesce(@cols + ',' + quotename(column_name), quotename(column_name))
from information_schema.columns where table_name = 'mfgOptions'
and data_type = 'char' and character_maximum_length
大部分時間,選項有'值。我不想將這些包含在我的旋轉表中。 我期望的結果是一個表,如:
MfgItemID | MfgOptionName | OptionSelection
-------------------------------------------
1000 | option1 | BX
1000 | option2 | B
2000 | option1 | LX
2000 | option3 | RX
使用上述@cols定義,我創建了以下UNPIVOT
declare @query nvarchar(max)
set @query = N'SELECT MfgItemID, MfgOptionName, OptionSelection
from (SELECT MfgItemID, ' + @cols + '
FROM mfgOptions) a
UNPIVOT (OptionSelection for MfgOptionName IN (' + @cols + ')) AS u
order by MfgItemID, MfgOptionName'
EXECUTE(@query)
此執行查詢時,似乎主要是做什麼,我需要的。然而,由於我在表格中有500,000多行,因此需要很長時間。如果我能夠在排除前排除所有空白選項,我認爲它運行得更快。
有沒有人有任何建議如何過濾字段值unpivoting之前?
這就是它!它確實加快了查詢速度。我得到了我想要的數據。謝謝! – 2012-04-09 18:48:57