Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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/8/sorting/2.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 firebird(取决于不同的列)、desc、ignore_Sql_Sorting_Firebird_Multi Select - Fatal编程技术网

高级排序sql firebird(取决于不同的列)、desc、ignore

高级排序sql firebird(取决于不同的列)、desc、ignore,sql,sorting,firebird,multi-select,Sql,Sorting,Firebird,Multi Select,[sql高级排序]请点击图片查看数据库示例(我的声誉太低,无法发布普通图片 我有数据库的以下部分,所选文本是正确的, 未选择的文本是我希望能起作用的部分(但我缺乏理解这一点的经验) 稀有有4个值,我想首先选择M和R这两个似乎成功的值 然后是棘手的部分,因为我使用sql的经验非常有限,而且我的ask好友不在城里 当premium='F'时,它实际上意味着它是一张普通卡,因此它需要链接到normalbuy和NormalSell列。foillbuy和foilsell应该被忽略,用于描述porpuse

[sql高级排序]请点击图片查看数据库示例(我的声誉太低,无法发布普通图片

我有数据库的以下部分,所选文本是正确的, 未选择的文本是我希望能起作用的部分(但我缺乏理解这一点的经验)

稀有有4个值,我想首先选择M和R这两个似乎成功的值

然后是棘手的部分,因为我使用sql的经验非常有限,而且我的ask好友不在城里

当premium='F'时,它实际上意味着它是一张普通卡,因此它需要链接到normalbuy和NormalSell列。foillbuy和foilsell应该被忽略,用于描述porpuse

当premium='T'时,它实际上意味着它是一张普通卡,因此它需要链接到foillbuy和foilsell列。对于desc porpuse,应该忽略normalbuy和NormalSell

那么我只想按价格从高到低排序

另请注意:

Premium |NormalBuy | Normalsell | FoilBuy| FoilSell | Stock 
    F       9.66  |   15.99    |  27.00 |    35.500 |    1  
这意味着我有一张普通卡,因为股票1和溢价是假的,foilbuy和foilsell信息在排序时可以忽略

Premium |NormalBuy | Normalsell | FoilBuy| FoilSell | Stock 
    T       0.030  |   0.040    |  0.100 |   0.500  |    1              
这意味着我有一张箔卡,因为股票1和溢价是真实的,为了排序,可以忽略正常买入和正常卖出信息

Premium |NormalBuy | Normalsell | FoilBuy| FoilSell | Stock 
    T       0.030  |   0.040    |  0.100 |   0.500  |    1              
下面是一个它应该是什么样子的示例

Rarity|Premium|NormalBuy|Normalsell|FoilBuy|FoilSell|Stock(row order)(leading)

 M         F     0.400     0.700     4.000   10.000    4        1
 M         F     1.420     1.800     4.000   12.000    4        2
 M         F     3.250     3.850     10.000  15.000    4        3
 M         T     1.350     1.700     4.000   16.000    4        4
 M         F     3.600     4.250     12.500  16.000    4        5
 M         F     3.100     4.000     9.000   16.750    4        6
 M         T     6.750     7.750     8.000   17.000    4        7
 M         F     5.500     5.750     14.500  17.500    4        8
 M         T     3.000     5.000     9.000   19.000    4        9
 M         F     14.00     18.000    17.750  28.000    4        10

below should be the result



 M          T     3.000    5.000     9.000   19.000    4        9     19.000
 M          F     14.00    18.000    17.750  28.000    4        10    18.000
 M          T     6.750    7.750     8.000   17.000    4        7     17.000
 M          T     1.350    1.700     4.000   16.000    4        4     16.000 
 M          F     5.500    5.750     14.500  17.500    4        8     5.750
 M          F     3.600    4.250     12.500  16.000    4        5     4.250
 M          F     3.100    4.000     9.000   16.750    4        6     4.000 
 M          F     3.250    3.850     10.000  15.000    4        3     3.850 
 M          F     1.420    1.800     4.000   12.000    4        2     1.800
 M          F     0.400    0.700     4.000   10.000    4        1     0.700

要决定要对哪些列进行排序,您需要在order by(可能是多个)中使用
CASE
条件,使用与条件的并集并按列索引排序,或者使用内部选择将值分配给虚拟列,然后按该列进行排序

大小写排序

SELECT ...
FROM ...
ORDER BY CASE WHEN Premium = 'T' THEN FOILBUY ELSE NORMALBUY END, 
         CASE WHEN Premium = 'T' THEN FOILSELL ELSE NORMALSELL END
使用
联合进行排序

SELECT FOILBUY, FOILSELL, ...
FROM ...
WHERE Premium = 'T'
UNION ALL
SELECT NORMALBUY, NORMALSELL, ...
WHERE Premium = 'F'
ORDER BY 1, 2
使用内部选择进行排序

SELECT BUY, SELL, ...
FROM (
  SELECT CASE WHEN Premium = 'T' THEN FOILBUY ELSE NORMALBUY END AS BUY, 
         CASE WHEN Premium = 'T' THEN FOILSELL ELSE NORMALSELL END AS SELL,
         ...
  FROM ...
)
ORDER BY BUY, SELL

但是,如果有一个显示需要使用哪些列的鉴别器列,则可能表明存在数据库规范化问题。如果无法消除此问题,您可能需要查看您的数据库设计。

您能否提供一些示例数据以及您希望如何对其进行排序?我可以,提供什么样的最佳做法?一个带下载的链接csv或纯文本,给我4-5minutes@Maverson…用几行文字来说明数据和所需的排序来编辑问题是最好的方法。对我来说,这听起来很糟糕。