【发布时间】:2014-03-22 12:12:16
【问题描述】:
我很难让这条 SQL 语句产生我想要的结果。这是我正在使用的代码:
SELECT * FROM "Contracts" WHERE
"productType" = 'RINbuy' AND
"clearTime" IS NULL
order by
case when "holdTime" is not null then 0 else 1 end,
case when "holdTime" is not null then
"generationTime"
else "contractLimitPrice"
end;
我正在尝试获得类似这样的结果
+---------------+----------+--------------------+
|generationTime | holdTime | contractLimitPrice |
+---------------+----------+--------------------+
| 1 |5 | 1.282 |
| 4 |6 | 1.535 |
| 2 |NULL | 1.911 |
| 3 |NULL | 1.764 |
+---------------+----------+--------------------+
但我明白了:
+---------------+----------+--------------------+
|generationTime | holdTime | contractLimitPrice |
+---------------+----------+--------------------+
| 1 |5 | 1.282 |
| 4 |6 | 1.535 |
| 3 |NULL | 1.764 |
| 2 |NULL | 1.911 |
+---------------+----------+--------------------+
最后两行交换。我尝试在每个可能的排列中添加 DESC 和 ASC 以及交换 0 和 1。我还尝试切换 case 语句的顺序。
编辑:
我的最终目标是,如果holdTime 不为NULL,则按generationTime 对表进行排序,如果holdTime 为NULL,则按contractLimitPrice 对DESC 进行排序。
【问题讨论】:
-
您能否发布两种情况的输出:(1)在最后一个分号之前添加 DESC; (2) 在第二个case语句的字段名的引号内加上DESC,如
generationTime DESC。 -
@ChrisJohnson 案例(1):底部的 2 行是正确的行,但顶部的两行是翻转的。案例(2):当我将 DESC 放在引号
ERROR: column "generationTime DESC" does not exist LINE 6: case when "holdTime" is not null then "generationTime DESC...中时出现错误 -
该示例并未阐明所有可能的情况。
标签: sql database postgresql