1

私はAdempiereで働いており、現在はpgAdminIIIでadempiereのデータベースを使用しています。このコードを入手し、SQLを3日間学習しています。

だから私はこのコードを持っています:

SELECT t.m_transaction_id, t.ad_client_id, t.ad_org_id, t.movementtype, 
t.movementdate, t.movementqty, t.m_attributesetinstance_id, 
asi.m_attributeset_id, asi.serno, asi.lot, asi.m_lot_id, asi.guaranteedate,
t.m_product_id, p.value, p.name, p.description, p.upc, p.sku, p.c_uom_id,
p.m_product_category_id, p.classification, p.weight, p.volume, p.versionno,
t.m_locator_id, l.m_warehouse_id, l.x, l.y, l.z, t.m_inventoryline_id,
il.m_inventory_id, t.m_movementline_id, ml.m_movement_id, t.m_inoutline_id,
iol.m_inout_id, t.m_productionline_id, prdl.m_productionplan_id, prdp.m_production_id,
t.c_projectissue_id, pjl.c_project_id, 
COALESCE(il.line, ml.line, iol.line, prdl.line, pjl.line) 
AS line,
daysbetween(
(T .movementdate):: TIMESTAMP WITH TIME ZONE,
getdate()
)AS movementagedays

FROM adempiere.m_transaction t
JOIN adempiere.m_locator l ON t.m_locator_id = l.m_locator_id
JOIN adempiere.m_product p ON t.m_product_id = p.m_product_id
LEFT JOIN adempiere.m_attributesetinstance asi ON t.m_attributesetinstance_id =
asi.m_attributesetinstance_id
LEFT JOIN adempiere.m_inventoryline il ON t.m_inventoryline_id = il.m_inventoryline_id
LEFT JOIN adempiere.m_movementline ml ON t.m_movementline_id = ml.m_movementline_id
LEFT JOIN adempiere.m_inoutline iol ON t.m_inoutline_id = iol.m_inoutline_id
LEFT JOIN adempiere.m_productionline prdl ON t.m_productionline_id =
prdl.m_productionline_id
LEFT JOIN adempiere.m_productionplan prdp ON prdl.m_productionplan_id =
prdp.m_productionplan_id
LEFT JOIN adempiere.c_projectissue pjl ON t.c_projectissue_id = pjl.c_projectissue_id;

これは美しいテーブルで終わります(rv_transactionを表示):

テーブルhttp://imageshack.us/a/img829/3558/tablerl.png

最後の列はmovementagedaysで、製品を操作しなかった日数を示しています。

Movementagedays列の対応する行の値が-90未満の場合、「90日以上」で終わる列「islager」を1つ追加したいだけです。

だから私は次のようなものを書きました

CASE WHEN movementagedays < -90 THEN 'more than 90 days' 
END AS isLager
FROM rv_transaction 

しかし、それが正しいかどうか、そしてどこにそれを置くべきかはわかりません。 また、大きなコードが適切に記述されていたり、パフォーマンスが最適化されている場合は、idkを使用します。

誰かが私を助けてくれたら嬉しいです。申し訳ありませんが、私のSQLスキルは私の英語と同様に悪いです

4

1 に答える 1

2

ほぼ正解です。正しいステートメントは次のとおりです。

SELECT *,
    CASE WHEN movementagedays < -90
         THEN 'more than 90 days'
         ELSE NULL END AS isLager
FROM rv_transaction
于 2012-10-25T07:38:12.067 に答える