我正在一个项目中,搜索功能的效率至关重要。
我有几个标志列(如c#中的枚举标志)。搜索此数据的速度非常快(往返3毫秒),但是现在我要播种了,我必须执行组计数。
因此,我有一个包含红色(1),白色(8)和蓝色(64)的项目“ A”,因此“颜色”列中的数字为73。
要搜索,我可以用此搜索带有红色的项目
Declare @colour int
set @colour = 1
Select *
From Items
Where (Colour & @colour) > 0
那很好。现在我必须将其分组(也是超级快的)
因此,如果我总共有8个项目,其中5个包含红色,3个包含白色,7个包含蓝色,结果将如下所示:
Colour Qty
------------------
1 5
8 3
64 7 ( I don't have to worry about the name )
所以:我有什么办法可以将数字73进行按位拆分?
(第2部分:如何将其转换为Linq to SQL?)
任何建议将不胜感激
谢谢^ _ ^
答案 0 :(得分:0)
好的-我想我已经找到了最好的解决方案:
我尝试了使用cte的视图:
with cte as (
select cast(1 as bigint) as flag, 1 pow
union all
select POWER(cast(2 as bigint),pow), pow + 1
from cte
where flag < POWER(cast(2 as bigint),62)
)
, cte2 as (
select flag from cte
union select -9223372036854775808
)
但是那太慢了,所以现在我把它做成一个静态表了。我加入一个按位的'&':
select Flag, Count(*)
From FlagValues fv
inner join Items i on (fv.Flag & i.Colour)
快得多^ _ ^