SQL中的透视整数位值
使用:SQL Server 2008 R2 我的目标是取一个给定的整数n,并在2列中选择每一个具有n位的整数排列,如下所示SQL中的透视整数位值,sql,sql-server,logic,Sql,Sql Server,Logic,使用:SQL Server 2008 R2 我的目标是取一个给定的整数n,并在2列中选择每一个具有n位的整数排列,如下所示 Given: n=4 Output: ColA ColB 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 1 2 0 2 0 2 1 2 0 3 0 3 0 3 1 3 1 ... 14 1 14 1 14 1
Given: n=4
Output:
ColA ColB
0 0
0 0
0 0
0 0
1 0
1 0
1 0
1 1
2 0
2 0
2 1
2 0
3 0
3 0
3 1
3 1
...
14 1
14 1
14 1
14 0
15 1
15 1
15 1
15 1
输出不需要排序,重复也不需要排序,这可能会使排序更容易,也可能不会。但是,我需要能够将n设置为任何整数。。。但是为了运行时间的缘故,我们假设它不到10
提前谢谢。如果可以,请告诉我,当您说“位”时,我假设您指的是2的幂-因此您可以在set语句中指定所需的2的幂,它将返回所有置换
DECLARE @Bit INT
SET @Bit = 4
;WITH NUMS AS (
SELECT TOP(POWER(2,@Bit)+1)ROW_NUMBER() OVER(ORDER BY sc.name) - 1 [N]
FROM syscolumns sc
)
SELECT n1.N, n2.N
FROM NUMS n1
CROSS JOIN NUMS n2
WHERE (n1.N + n2.N) <= POWER(2,@Bit)
ORDER BY n1.N, n2.N
您可能希望尝试以下方法:
declare @bits int
set @bits = 4
;with AllTheNumbers as (
select cast (POWER(2, @Bits) as int) - 1 Number
union all
select Number - 1
from AllTheNumbers
where Number > 0
),
Bits as (
select @Bits - 1 Bit
union all
select Bit - 1
from Bits
where Bit > 0
)
select *, case when (Number & cast (POWER(2, Bit) as int)) != 0 then 1 else 0 end
from AllTheNumbers cross join Bits
order by Number, Bit desc
所有数字产生从0到2^n-1的数字,位产生从0到@Bits-1的位数字,主部件连接它们并计算每个位置的位值。工作正常。多谢各位。相当聪明——我得倒一点。