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
Postgresql使用CASE根据其他数据的存在返回不同的数据_Sql_Postgresql_Case - Fatal编程技术网

Postgresql使用CASE根据其他数据的存在返回不同的数据

Postgresql使用CASE根据其他数据的存在返回不同的数据,sql,postgresql,case,Sql,Postgresql,Case,我试图创建一个查询,根据数据库中某些数据的存在返回不同的值。 如果数据存在,我希望返回数据(x列),如果数据不存在,我返回一个“count”=0 我试过: WITH cart AS ( SELECT o.id AS order_id, o.ecom_id,COUNT(op.id) as count_product FROM order_products op JOIN orders o ON op.o

我试图创建一个查询,根据数据库中某些数据的存在返回不同的值。 如果数据存在,我希望返回数据(x列),如果数据不存在,我返回一个“count”=0

我试过:

WITH cart AS (
        SELECT o.id AS order_id, o.ecom_id,COUNT(op.id) as count_product
                    FROM order_products op
                    JOIN orders o ON op.order_id = o.id
                    JOIN order_status os ON os.id = o.status
                    WHERE dealer_id = 19 AND os.level = 0
                    GROUP BY o.id, o.ecom_id limit 1
),
cart_b AS(
    SELECT EXISTS(SELECT * FROM cart) cart_full
)

SELECT CASE
    WHEN cart_full is True THEN(SELECT order_id,ecom_id FROM cart)
    ELSE (SELECT 0 AS count_product)
END
FROM cart_b
问题是:

ERROR:  subquery must return only one column
LINE 15:  WHEN cart_full is True THEN(SELECT dropix_order_id,ecom_id ...
我理解原因,但我不知道如何避免这种情况,并从购物车返回所有数据

没有plpgsql函数是否可能?

这就是您想要的吗

with cart as (...)
select order_id, ecom_id, count_product from cart
union all
select x.*
from (values(null, null, 0)) as x(order_id, ecom_id, count_product)
where not exists (select 1 from cart)

查询在cte中运行。如果它返回一些东西,那么我们使用它作为结果;否则,我们将返回一条记录,前两列的值为固定值,
null
,计数为
0

要返回的内容:

IF cart_full is True THEN
    SELECT order_id, ecom_id FROM cart
ELSE
    SELECT 0 AS count_product
无法作为单个查询返回。为什么?因为有不同的列。我建议您返回所有三列。如果没有行,则其他列将为
NULL

为此,您可以使用如下查询:

WITH cart AS (
        SELECT o.id AS order_id, o.ecom_id, COUNT(op.id) as count_product
        FROM order_products op JOIN
             orders o
             ON op.order_id = o.id JOIN
             rder_status os ON os.id = o.status
        WHERE dealer_id = 19 AND os.level = 0
        GROUP BY o.id, o.ecom_id 
        LIMIT 1
       )
SELECT o.id AS order_id, o.ecom_id, count_product
FROM cart
UNION ALL
SELECT NULL, NULL, 0
WHERE NOT EXISTS (SELECT 1 FROM cart)

我不太明白你的疑问。我有以下错误:错误:联合类型整数和文本无法匹配