合并 Select 语句并动态排序?

Posted

技术标签:

【中文标题】合并 Select 语句并动态排序?【英文标题】:Merge Select statement and order dynamically? 【发布时间】:2010-10-16 12:10:47 【问题描述】:
    我有一个 select 语句,它将返回 5 个值,分别为 val1、val3、val5、val2、val4 我有另一个 select 语句,它将返回一组记录,其中一个列的值来自上述集合(val1 到 val5)

是否可以用第一个 select 语句的结果对第二个 select 语句进行排序?

我的意思是按 val1,val3,val5,val2,val4 的顺序。

这意味着如果第一个语句颠倒顺序,我必须颠倒顺序。

如果可以,请告诉我。

【问题讨论】:

您能否发布一个脚本来说明如何创建您正在使用的表(可以是示例版本)以及每个表的示例选择语句?这样你会得到更好的答案。 【参考方案1】:

你还没有发布你的实际查询,所以我可能会假设它们比它们更简单,但如果你的第一个语句是:

select val from valuetable order by someothercolumn

那么您的第二个查询可能是

select table2.name, table2.phonenumber, table2.creationdate, table2.val
from table2
left join valuetable on table2.val = valuetable.val
order by valuetable.someothercolumn

换句话说,您可以将第一个语句的顺序复制到第二个。

【讨论】:

【参考方案2】:

我不确定我是否理解你的问题,但我会试一试。

用行号增加第一个查询(IIRC,MsSQL server 2005 有一个 ROW_NUMBER() 函数) 加入 val#,并按关联的行号排序 从结果中去除行号

【讨论】:

【参考方案3】:

大概,第一个语句有一些顺序(如果没有,“val”的顺序将是任意的,你不会关心它们。

所以,取第二个语句(返回数据),并在 vals 上离开第一个语句(返回有序的“val”),并按照第一个语句的顺序排序。

【讨论】:

【参考方案4】:

我不确定我是否完全理解这个问题,但试试这个。我假设您的表格看起来像这样?

Table1:
myfield1
val1
val2
val2

Table2:
myField2  myDataField
val1      test1
val2      test2
val3      test3

那么你的 sql 语句应该是这样的

SELECT myDataField 
FROM Table2 INNER JOIN Table1 ON Table2.myField2=Table1.myField1 
ORDER BY Table1.myField1 

HTH

【讨论】:

【参考方案5】:

简单的回答:是的

...但是你必须使用二级排序 列和嵌套的内部选择。

表一 值列 +------+ | val1 | +------+ | val3 | +------+ | val5 | +------+ | val2 | +------+ | val4 | +------+

选择SetOne 排名 ValColumn +--------+----------+ | 1 | val1 | +--------+----------+ | 2 | val3 | +--------+----------+ | 3 | val5 | +--------+----------+ | 4 | val2 | +--------+----------+ | 5 | val4 | +--------+----------+

表二 ValColumn Col +------------+------+ |值 | .... | +-----------+------+

最终选择 排名 ValColumn Col +--------+------------+------+ | 1 | val1 | .... | +--------+------------+------+ | 1 | .... | .... | +--------+------------+------+ | 1 | val1 | .... | +--------+------------+------+ | 2 | val3 | .... | +--------+------------+------+ | 2 | .... | .... | +--------+------------+------+ | 2 | val3 | .... | +--------+------------+------+ | 3 | val5 | .... | +--------+------------+------+ | 3 | .... | .... | +--------+------------+------+ | 3 | val5 | .... | +--------+------------+------+ | 4 | val2 | .... | +--------+------------+------+ | 4 | .... | .... | +--------+------------+------+ | 4 | val2 | .... | +--------+------------+------+ | 5 | val4 | .... | +--------+------------+------+ | 5 | .... | .... | +--------+------------+------+ | 5 | val4 | .... | +--------+------------+------+

这里是选择语句:

选择 SelectSetOne.rank, TableTwo.ValColumn, 表二。* 从 (选择 排名=计数(*), 值列 FROM TableOne) 作为 SelectSetOne, 内部联接 表二 ON SelectSetOne.ValColumn = TableTwo.ValColumn 订购方式 SelectSetOne.rank;

【讨论】:

以上是关于合并 Select 语句并动态排序?的主要内容,如果未能解决你的问题,请参考以下文章

将多个 CASE 语句合并为一个并 SELECT INTO 临时表

使用动态 sql 为 select 语句创建列

union的使用

mysql分组合并语句

oracle中,将两个select语句的结果作为一个整体显示出来

sql语句:将两个查询结果关联显示