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

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

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

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

如果可以,请告诉我。

【问题讨论】:

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

标签: sql sql-server sql-server-2005


【解决方案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;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-24
            • 2023-02-23
            • 2011-02-19
            • 1970-01-01
            • 1970-01-01
            • 2022-01-04
            • 1970-01-01
            相关资源
            最近更新 更多