首页 > 解决方案 > 包含从 AA 到 ZZ 的所有可能组合的表格

问题描述

该表的结果当前无法在 SQL 中管理,因此我使用了替代方法。感谢任何对此进行调查的人。


我希望在 SQL (Microsoft) 中创建一个表,其中包含从 AA 到 ZZ 的所有可能组合,包括“NULL”,因此“AA”是可能的组合之一,然后“AA”和“ZZ”是另一种组合。我从以下开始,但因为太复杂而退出了“AZ”:

    with T_VALUE as (
    select 'AA' as Value union
    select 'AB' union
    select 'AC' union
    select 'AD'     )

select  distinct
    Value as Value_1,
    null as Value_2,
    null as Value_3,
    null as Value_4
from    T_VALUE
union
select  A.Value,
    B.Value,
    null,
    null
from    T_VALUE A
    cross join T_VALUE B
where   A.Value < B.Value
union
select  A.Value,
    B.Value,
    C.Value,
    null
from    T_VALUE A
    cross join T_VALUE B
    cross join T_VALUE C
where   A.Value < B.Value
and B.Value < C.Value
union
select  A.Value,
    B.Value,
    C.Value,
    D.Value
from    T_VALUE A
    cross join T_VALUE B
    cross join T_VALUE C
    cross join T_VALUE D
where   A.Value < B.Value
and B.Value < C.Value
and C.Value < D.Value;

这确实导致了以下结果:

截屏

V1  V2    V3    V4
AA  NULL  NULL  NULL
AA  AB    NULL  NULL
AA  AB    AC    NULL
AA  AB    AC    AD
AA  AB    AD    NULL
AA  AC    NULL  NULL
AA  AC    AD    NULL
AA  AD    NULL  NULL
AB  NULL  NULL  NULL
AB  AC    NULL  NULL
AB  AC    AD    NULL
AB  AD    NULL  NULL
AC  NULL  NULL  NULL
AC  AD    NULL  NULL
AD  NULL  NULL  NULL

我也可以使用仅存储在一个字段中的值。而且我也只需要建表一次。我可以用它来引用可能组合的项目。我知道会有很多可能性。

关于如何生成查询以更简单的方式编写此表的任何想法?

更新:我确实需要 AA - ZZ 的所有可能组合,包括“NULL”值,因为一个选项也可以是“AA”或“BC”

标签: sql

解决方案


with    list as
        (
        select  ascii('A') as i
        union all
        select  i + 1
        from    list
        where   i < ascii('Z')
        )
select  char(c1.i) + char(c2.i)
from    list c1
cross join
        list c2
union all
select  null

dbfiddle.co.uk 上的示例


推荐阅读