在SQL中查找列的排列

时间:2014-05-12 06:34:08

标签: sql db2

我有一个参考数据表,其中列为代码和值。

例如有三种代码类型即。 A,B,C。

表格如下:

Code      Value
---------------------
 A1       a_one
 A2       a_two
 B1       b_one
 B2       b_two
 B3       b_three
 C1       c_one
 C2       c_two
 C3       c_three
 C4       c_four
---------------------

我有一个要求,输入将是代码类型,输出应该是输入代码类型之间的所有排列。

例如如果输入代码类型是A和C,我的sql的输出应该是:

col_1     col_2
---------------------
 A1       C1
 A1       C2
 A1       C3
 A1       C4
 A2       C1
 A2       C2
 A2       C3
 A2       C4
---------------------

类似地,如果输入代码类型是A,B,C,则sql的输出将具有三列,其中所有排列在A,B,C之间。 A1 B1 C1至A2 B3 C4。

我不知道如何开始这个。所以任何提示都会有用。

感谢阅读!

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,这是CROSS JOIN实际上是你想要的罕见情况之一。 CROSS JOIN将为您提供两组Cartesian product,这意味着这些组中值之间的所有可能组合。

示例:

  • 第1列的表A包含值' a'和' b'
  • 第2列的表B包含值' c'和' d'

以下CROSS JOIN查询(请注意,目的中没有指定'加入条件')

SELECT  *
FROM    A
CROSS JOIN B

将返回以下结果:

1   2
--------
a   c
a   d
b   c
b   d

我创建了一个 SQL Fiddle 来向您展示可能的解决方案。您可以稍微调整一下,看看这是否是您所需要的。 (注意它是Oracle的小提琴,因为没有DB2选项。)