假设我有一张表:
a b c d e f
---------------------------------
1.2 2.3 4.4 5.1 6.7 11.9
7.2 2.3 4.3 5.1 4.7 3.9
1.9 5.3 3.3 5.1 3.7 8.9
5.2 2.7 7.4 9.1 1.7 2.9
如果我必须计算某些东西作为列总和的乘法的sqrt
SQRT(sum(a*a)),SQRT(sum(a*b)),SQRT(sum(a*c)),SQRT(sum(a*d)),SQRT(sum(a*e)),SQRT(sum(a*f)),SQRT(sum(b*b)),SQRT(sum(b*c)),SQRT(sum(b*d))....SQRT(sum(f*f))
threads
(在此
我想6个线程来解决这个问题
并插入新表?目前我有类似的东西:
SELECT SQRT(sum(a*a)),SQRT(sum(a*b)), .... ,SQRT(sum(f*f)) INTO TEMP FROM a_table
答案 0 :(得分:1)
在SQL Server(或我知道的任何其他RDBMS)中没有明确的线程控制,也不应该。虽然在查询中提供索引提示和排序规则是一回事,但是人们比你更聪明,或者我编写查询优化引擎并且知道在任何给定操作中使用(或不使用)多少线程。
所以,简短的回答是你不能。
如果您需要进行严格的数字运算并且需要这种级别的控制,则必须将数据提取到应用程序中并在那里进行处理,以便您可以更好地控制数据。
答案 1 :(得分:1)
问题是您的架构与您想要提取的信息类型不匹配,这些信息为什么获取您想要的信息是如此痛苦。在这种情况下,值不规范化。如果对它们进行标准化,则查询变得微不足道:
With Inputs As
(
Select 1 As RowNum, 1.2 As a, 2.3 As b, 4.4 As c, 5.1 As d, 6.7 As e, 11.9 As f
Union All Select 2, 7.2, 2.3, 4.3, 5.1, 4.7, 3.9
Union All Select 3, 1.9, 5.3, 3.3, 5.1, 3.7, 8.9
Union All Select 4, 5.2, 2.7, 7.4, 9.1, 1.7, 2.9
)
, NormalizedInputs As
(
Select RowNum, 'a' As ColName, a As Value From Inputs
Union All Select RowNum, 'b', b From Inputs
Union All Select RowNum, 'c', c From Inputs
Union All Select RowNum, 'd', d From Inputs
Union All Select RowNum, 'e', e From Inputs
Union All Select RowNum, 'f', f From Inputs
)
Select N1.RowNum, Sqrt( Sum( N1.Value * N2.Value ) )
From NormalizedInputs As N1
Left Join NormalizedInputs As N2
On N2.RowNum = N1.RowNum
And N2.ColName >= N1.ColName
Group By N1.RowNum