grenesting语句中的Case postsq

2024-09-28 01:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在postgresql9.2中尝试将这个python函数转换成sql。在

def calc_open_order(xOrder):
    temp_row = xOrder.so_reportL[0]
    open_closed_status = 'OPEN'
    order_status = temp_row[3]
    if order_status == 'FAILED':
        open_closed_status = 'CLOSED'
    elif order_status == 'REMOVED':
        open_closed_status = 'CLOSED'
    elif order_status == 'NO_PENDING_ACTION':
        open_closed_status = 'CLOSED'
    elif order_status == 'PENDING_REMOVED':
        open_closed_status = 'CLOSED'
    else:
        # check the shipping group status
        any_open_sg = False
        for sd_row in xOrder.so_reportL:
            if sd_row[45] == 'PENDING_SHIPMENT':
                any_open_sg = True
            elif sd_row[45] == 'PROCESSING':
                any_open_sg = True
            elif sd_row[45] == 'INITIAL':
                any_open_sg = True
            elif sd_row[45] == 'PENDING_MERCHANT_ACTION':
                any_open_sg = True
        if any_open_sg == False:
            open_closed_status = 'CLOSED'
    #
    if open_closed_status == 'CLOSED':
        ord_open_ind = 'False'
    else:
        ord_open_ind = 'True'
    return ord_open_ind,

我用一个case语句将这个逻辑转换成sql:

^{pr2}$

请注意sd_行[45]与Shipping_status字段相同。 我的陈述对吗?在


Tags: falsetrueifstatusanyorderopensd
1条回答
网友
1楼 · 发布于 2024-09-28 01:30:34

可能(未测试):

SELECT CASE WHEN ord_status IN ('FAILED','REMOVED','NO_PENDING_ACTION', 'PENDING_REMOVED')
              OR shipping_status NOT IN ('PENDING_SHIPMENT','PROCESSING','INITIAL','PENDING_MERCHANT_ACTION')
            THEN 'False'::text
            ELSE 'True' END AS ord_open_ind

返回类型可能最好是^{},但这不是您的问题。在

相关问题 更多 >

    热门问题