Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于元组mysql中的数据对列进行排序_Mysql_Sql - Fatal编程技术网

基于元组mysql中的数据对列进行排序

基于元组mysql中的数据对列进行排序,mysql,sql,Mysql,Sql,喂,我有一张桌子 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 可能吗 编辑: 问题似乎是:如何按值的顺序获取列名列表?您似乎在请求输出,其中输出中的每一行只是列中数据值顺序的说明。 然后,如果值总是介于1和5之间的整数,则可以通过输出字符值“a”,其中数据值为1,输出字符值“B”,

喂,我有一张桌子

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
可能吗

编辑:


问题似乎是:如何按值的顺序获取列名列表?

您似乎在请求输出,其中输出中的每一行只是列中数据值顺序的说明。 然后,如果值总是介于1和5之间的整数,则可以通过输出字符值“a”,其中数据值为1,输出字符值“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

SQL根本不是执行您描述的操作的工具,因为它违反了。我的意思不是“关系”的一般用法,意思是关系的数学定义

  • 关系中没有列的顺序。列是一个集合,根据定义是无序的。列由其名称标识,而不是从左到右的位置
  • 每个命名列下的行中的所有条目必须是同一数据域的一部分。如果你把它们一行一行地混在一起,你就违反了这一点
我猜所有列A到F实际上都在使用同一数据域中的值,否则对它们重新排序就没有任何意义了。如果这是真的,那么定义一个包含重复列组的表就是违规。您应该将所有六列放在第二个表的一列中。然后就很容易按值对它们进行排序


基本上,通过在一些应用程序代码中格式化数据结果可以更好地解决问题。

我明白了。您希望对每行中的值进行排序,并按顺序显示列的名称

让我假设您有一个行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;

有一种方法可以做到,按列顺序获取coulmn名称并打印它。 对coulmn中的每个值进行迭代,并获取cloumn数据中指定序号的列名。这里的顺序位置是每个coulmn数据中的值。迭代每一行和每一列,问题就解决了

select column_name 
from information_schema.columns 
where table_name = 'my_table_name' and ordinal_position = 2;

这是一个谜还是你还在添加一些解释?@juergend:请解释我应该包括哪些信息。我不明白你的输出与输入有什么关系。请把问题修改清楚。@GordonLinoff:我的意思是,如果我选择了一个元组,那么根据它的数据,我可以对它的列进行排序。我相信我的期望是错误的。就像最后替换列名一样。我不是db背景,所以我在尝试。@Rorschach,别担心。祝你好运。我同意,我应该考虑正常化。事实上,你的解释很好。谢谢,这正是我所期待的。我担心我用这个得不到我所需要的。随着我了解更多,将来我也会尝试这个建议。谢谢你的提示。