说,我有一张桌子
A B C D E F
1 2 4 3 6 5
4 2 3 1 6 5
4 5 3 6 1 2
如何根据基于其数据的重新排列获得输出。例如,
ABDCFE
DBCAFE
EFCABD
有可能吗?
编辑:
问题似乎在于:如何按值按顺序获取列名列表?
答案 0 :(得分:1)
您似乎要求输出,其中输出中的每一行只是列中数据值顺序的规范。 然后,如果值始终是1到5之间的整数,则可以通过输出' A'的字符值来实现。数据值为1,a' B'其中数据值为2,等等。这个SQL会这样做。
Select Char(A+64)A, Char(B+64) B,
Char(C+64) C, Char(D+64) D,
Char(E+64) E, Char(F+64) F
From table
如果想要在一个输出列中使用列排序顺序,您也可以这样做:
Select Char(A+64) + Char(B+64) +
Char(C+64) + Char(D+64) +
Char(E+64) + Char(F+64) SortOrder
From table
答案 1 :(得分:1)
SQL根本不是执行您描述的操作的工具,因为它违反了relation的概念。我并不是说“关系”的共同用法意味着关系 ship ,我的意思是关系的数学定义。
我猜你的所有列A到F实际上都是在同一个数据域中使用值,否则重新排序它们没有任何意义。如果这是真的,那么您通过定义具有重复列组的表来违反First Normal Form。您应该将所有六列都放在第二个表的一列中。然后按值对它们进行排序变得非常容易。
基本上,通过在某些应用程序代码中格式化数据结果,可以更好地解决您尝试做的事情。
答案 2 :(得分:1)
我明白了。您希望对每行中的值进行排序,并按顺序显示列的名称。
我假设您有一个行ID,因此您可以识别每一行。然后:
select id, group_concat(which order by val) as ordered_column_names
from ((select id, a as val, 'A' as which from t) union all
(select id, b, 'B' as which from t) union all
(select id, c, 'C' as which from t) union all
(select id, d, 'D' as which from t) union all
(select id, e, 'E' as which from t) union all
(select id, f, 'F' as which from t)
) t
group by id
order by id;
答案 3 :(得分:1)
有一种方法可以做到这一点,按列顺序获取库存名称并打印出来。 对于coulmn中的每个值,重复此操作并获取cloumn数据中指定的序号的列名。这里的序数位置是每个库仑数据的值。迭代每一行和每一列,你的问题就解决了。
select column_name
from information_schema.columns
where table_name = 'my_table_name' and ordinal_position = 2;