Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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/4/postgresql/10.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_Postgresql - Fatal编程技术网

Sql 按产品类别名称订购行

Sql 按产品类别名称订购行,sql,postgresql,Sql,Postgresql,我的客户希望我按不同类别订购不同的产品,例如,当类别名称为“交流发电机”时,我应首先显示生产商为“ABC”的零件,当类别名称为“起动机”时,我应首先显示生产商为“DEF”的零件,否则按图像计数和参数计数订购。我的模式如下所示 零件(id、生产商id、类别id) 类别(id、名称) 制作人(id、姓名) 我试着按顺序排列结果,就像这样 SELECT * FROM parts JOIN categories ON parts.category_id = cat

我的客户希望我按不同类别订购不同的产品,例如,当类别名称为“交流发电机”时,我应首先显示生产商为“ABC”的零件,当类别名称为“起动机”时,我应首先显示生产商为“DEF”的零件,否则按图像计数和参数计数订购。我的模式如下所示

零件(id、生产商id、类别id) 类别(id、名称) 制作人(id、姓名)

我试着按顺序排列结果,就像这样

SELECT *
FROM   parts 
       JOIN categories 
         ON parts.category_id = categories.id 
       JOIN producers 
         ON parts.producer_id = Cast(producers.lauber_id AS INT) 
ORDER  BY CASE 
            WHEN categories.NAME = 'alternator' 
                  OR categories.NAME = 'starter' THEN 
            producers.NAME = 'STARDAX' 
             OR producers.NAME = 'POWERTRUCK' 
          END DESC, 
          CASE 
            WHEN categories.NAME = 'something else' THEN 
            producers.NAME = 'POINTGEAR' 
             OR producers.NAME = 'LAUBER' 
          END DESC, 
          images_count DESC, 
          parameters_count DESC 

我不确定我是否做得对,我不是SQL的大师。我正在使用Postgres。

您可以使用
案例

SELECT *
FROM   parts 
       JOIN categories 
         ON parts.category_id = categories.id 
       JOIN producers 
         ON parts.producer_id = Cast(producers.lauber_id AS INT) 
ORDER  BY CASE WHEN categories.NAME = 'alternator' AND producers.NAME = 'ABC' THEN 0
               WHEN categories.NAME = 'starter' AND producers.NAME = 'DEF' THEN 0
               -- ...
               ELSE 1
          END,
          images_count DESC, 
          parameters_count DESC 

太多了,我忘了在
的情况下我可以做
然后0
。正如预期的那样,你的回答很有帮助。非常感谢。当类别为交流发电机或起动机且生产商名称为ABC时,我如何根据图像计数和参数计数对结果进行排序。我想展示生产商是ABC的零件,它们的顶部有图像和参数。