在SQL中查找列的排列
我有一个参考数据表,其中列是代码和值 例如,有三种代码类型,即。A、 B,C 下表如下:在SQL中查找列的排列,sql,db2,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 ------------------
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,则my 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
我不知道该怎么开始。所以任何提示都是有用的
谢谢你的阅读 如果我正确理解了你的问题,这是一种罕见的情况,其中a实际上就是你想要的。交叉连接将为您提供两个集合的组合,这意味着这些集合中的值之间的所有可能组合 例如: 列为1的表A包含值“A”和“b” 第2列的表B包含值“c”和“d” 以下交叉联接查询说明没有指定“联接条件”:
SELECT *
FROM A
CROSS JOIN B
将返回以下结果:
1 2
--------
a c
a d
b c
b d
我创建了一个示例来向您展示一个可能的解决方案。你可以稍微调整一下,看看这是否是你所需要的。请注意,这是一个Oracle fiddle,因为没有DB2选项。我不明白这些数字来自何方。你说如果输入是A和C,其中一个输出是A2,C4。为什么不换个方向绕A4,C2?你能详细说明一下吗?@Lennart我想他想根据输入进行动态选择列。如果是这种情况,select列中的If-ELSE语句就是解决此问题的方法。