Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Sql 如何按“输入条件”的顺序从数据库中获取结果;在;条款_Sql_Database_Sql Server 2005 - Fatal编程技术网

Sql 如何按“输入条件”的顺序从数据库中获取结果;在;条款

Sql 如何按“输入条件”的顺序从数据库中获取结果;在;条款,sql,database,sql-server-2005,Sql,Database,Sql Server 2005,对不起,英语不好 bfproduct是一个表,productid是该表中的主键,productname是该表中定义的另一个字段 当我执行此查询时,从bfproduct中选择*,其中productid位于(23,5,543132,32)。结果如下: productid | productname 5 15 Park Avenue 23 Good Boy Bad Boy 32 dsf sf gfdsf dsf d 54 dsdsfsa f

对不起,英语不好

bfproduct是一个表,productid是该表中的主键,productname是该表中定义的另一个字段

当我执行此查询时,
从bfproduct中选择*,其中productid位于(23,5,543132,32)
。结果如下:

productid | productname 5 15 Park Avenue 23 Good Boy Bad Boy 32 dsf sf gfdsf dsf d 54 dsdsfsa ffs ff sfsf 3132 Just Books - On The Failure of Legal System productid |产品名称 公园大道5号15 好孩子坏孩子 32 dsf sf gfdsf dsf d 54 DSFSA ffs ff sfsf 3132正义之书——论法制的失败 是否有任何方法可以通过“in”条款中提供的productid按顺序获取结果集,例如

productid | productname 23 Good Boy Bad Boy 5 15 Park Avenue 54 dsdsfsa ffs ff sfsf 3132 Just Books - On The Failure of Legal System 32 dsf sf gfdsf dsf d productid |产品名称 好孩子坏孩子 公园大道5号15 54 DSFSA ffs ff sfsf 3132正义之书——论法制的失败 32 dsf sf gfdsf dsf d
请帮助…

您必须添加一个ORDER BY子句,将行按正确顺序排列。

以下是一种方法:

SELECT *
FROM bfproduct
WHERE productid
IN (23,5,54,3132,32)
ORDER BY
   CASE productid
      WHEN   23 THEN 0
      WHEN    5 THEN 1
      WHEN   54 THEN 2
      WHEN 3132 THEN 3
      WHEN   32 THEN 4
   END

我能想到的第一件事是,试试

select  bfproduct.*
from    bfproduct INNER JOIN
(
    select 1 as sequence, 23 as productid
    union
    select 2,5
    union
    select 3,54
    union
    select 4,3132
    union
    select 5,32
) as lookup on bfproduct.productid=lookup.productid
order by lookup.sequence

(我还没有测试过,所以可能有一些小的语法错误!)

你能给我举个例子吗?看这与上面的mark byers答案类似(我投了赞成票,因为我认为它更优雅)。这个解决方案的好处是,你只需要指定一次你想要的顺序和键字段。这也使得解决方案具有可重用性。对于另一种解决方案,您需要在每次创建新报表时同时创建sort和where子句。当然,在这种情况下,UNION ALL远比UNION更适合一次性使用,但在我看来,另一种解决方案更适合构建可重用的解决方案。