我有一个查询,例如:
remove_action('woocommerce_single_product_summary','woocommerce_template_single_title', 5);
add_action('woocommerce_single_product_summary', 'woocommerce_new_single_title', 5);
if ( ! function_exists( 'woocommerce_new_single_title' ) ) {
function woocommerce_new_single_title() {
$product = wc_get_product( $post_id );
$product->get_regular_price();
$product->get_sale_price();
$product->get_price();
$pprice = $product->get_price();
?>
<h1 itemprop="name" class="product_title entry-title"><span><?php the_title(); ?>: <?php $product->get_price(); ?></span></h1>
<?php
}
}
查询运行正常,但不返回任何值。如果找不到数量,我希望它返回0。我在哪里弄错了?
答案 0 :(得分:2)
如果所有行都被过滤掉,则带有GROUP BY
的聚合查询将不返回任何行。
具有 no GROUP BY
的聚合查询始终返回一行,即使所有行都被过滤掉了。
因此,只需删除GROUP BY
。并将SELECT
更改为:
select coalesce(sum(a.quantity), 0) - coalesce(max(cc.quantityCor), 0)
答案 1 :(得分:1)
我可能是错的,但是看来您只是想从发货数量7085740的交货数量中减去正确的数量。您不需要为此进行复杂的查询。尤其是您追求的GROUP BY
子句毫无意义。
编写此查询的一种方法是:
select
sum(case when transaction_type = 'DELIVER' then quantity else 0 end) -
sum(case when transaction_type = 'CORRECT' then quantity else 0 end) as diff
from rcv_transactions
where shipment_line_id = 7085740;
答案 2 :(得分:0)
我遇到了这样的查询,并在商品无效时尝试返回“ X”。
SELECT case when segment1 is not null then segment1 else 'X' end
--INTO v_orgValidItem
FROM mtl_system_items_b
WHERE segment1='1676001000'--'Jul-00'--l_item
and organization_id=168;
..但是它返回NULL。
已更改为不使用分组依据使用聚合,现在当该项目无效时返回“ X”。
SELECT case when max(segment1) is not null then max(segment1) else 'X' end valid
--INTO v_orgValidItem
FROM mtl_system_items_b
WHERE segment1='1676001000'--'Jul-00'--l_item
and organization_id=168;--l_ship_to_organization_id_pb;
答案 3 :(得分:0)
这是另一个例子,证明操作顺序确实很重要。
当此报价编号不匹配时,此查询返回NULL:
SELECT MAX(NVL(QUOTE_VENDOR_QUOTE_NUMBER,0))
FROM PO_HEADERS_ALL
WHERE QUOTE_VENDOR_QUOTE_NUMBER='foo.bar';
..颠倒MAX和NVL的顺序会带来所有不同。该查询返回NULL值条件:
SELECT NVL(MAX(QUOTE_VENDOR_QUOTE_NUMBER),0)
FROM PO_HEADERS_ALL
WHERE QUOTE_VENDOR_QUOTE_NUMBER='foo.bar';