我有一个指定产品的制造选项的列式表。每个选项可以是以下选项的一个子集('','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