SQL中的透视整数位值

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

使用: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
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的位数字,主部件连接它们并计算每个位置的位值。

工作正常。多谢各位。相当聪明——我得倒一点。