如何从 SQL 中的两个不同列确定状态
How to determine a status from two different columns in SQL
我正在尝试确定查询中的“完整”或“不完整”值,但我需要引用两个不同的列来确定。
例如 - 我有一个包含 4 个事件的货件。在数据库中,我有以下列。
'cs_event_count' 和 'cs_completed'
Event count 告诉我事件的总数,Completed 告诉我有多少事件已经完成。
我希望我的查询如下所示
如果 'Event count' 值等于 'Completed' 值则“完成”
如果 'Event count' 与 'Completed' 值不匹配,则“不完整”
我也在从其他表中引入数据。这是我的查询
这是我的查询示例
select dba.disp_ship.ds_id, dba.disp_ship.ds_origin_id, dba.disp_ship.ds_findest_id, dba.disp_ship.ds_billto_id, dba.disp_ship.ds_bill_charge,
dba.disp_ship.ds_status, dba.disp_ship.ds_bill_date, dba.disp_ship.ds_ship_date, dba.disp_ship.ds_ship_type, dba.disp_ship.movecode,
dba.companies.co_id, dba.companies.co_name, dba.current_shipments.cs_id, dba.current_shipments.cs_event_count, dba.current_shipments.cs_routed, dba.current_shipments.cs_assigned, dba.current_shipments.cs_completed,
(CASE ds_status WHEN 'A' THEN 'TEMPLATE'
WHEN 'C' THEN 'CANCELLED'
WHEN 'D' THEN 'DECLINED'
WHEN 'E' THEN 'QUOTED'
WHEN 'F' THEN 'OFFERED'
WHEN 'H' THEN 'PENDING'
WHEN 'K' THEN 'OPEN'
WHEN 'N' THEN 'AUTHORIZED'
WHEN 'Q' THEN 'AUDIT REQUIRED'
WHEN 'T' THEN 'AUDITED'
WHEN 'W' THEN 'BILLED'
END) AS 'BILLING STATUS',
(CASE ds_ship_type WHEN '2201' THEN 'MONTREAL'
WHEN '2202' THEN 'DRYVAN'
WHEN '2203' THEN 'BROKERAGE'
WHEN '2204' THEN 'OLD BROKERAGE (NO GOOD)'
WHEN '2205' THEN 'LIFTING'
WHEN '2206' THEN 'WAREHOUSE'
END) AS 'DIVISION'
from dba.disp_ship
inner join dba.companies ON dba.disp_ship.ds_billto_id=dba.companies.co_id
inner join dba.current_shipments ON dba.disp_ship.ds_id=DBA.current_shipments.cs_id
您是否根据问题中包含的代码尝试使用 CASE
表达式?
CASE WHEN dba.current_shipments.cs_event_count = dba.current_shipments.cs_completed
THEN 'COMPLETE'
ELSE 'INCOMPLETE'
END
AS Status
我正在尝试确定查询中的“完整”或“不完整”值,但我需要引用两个不同的列来确定。
例如 - 我有一个包含 4 个事件的货件。在数据库中,我有以下列。
'cs_event_count' 和 'cs_completed'
Event count 告诉我事件的总数,Completed 告诉我有多少事件已经完成。
我希望我的查询如下所示
如果 'Event count' 值等于 'Completed' 值则“完成” 如果 'Event count' 与 'Completed' 值不匹配,则“不完整”
我也在从其他表中引入数据。这是我的查询
这是我的查询示例
select dba.disp_ship.ds_id, dba.disp_ship.ds_origin_id, dba.disp_ship.ds_findest_id, dba.disp_ship.ds_billto_id, dba.disp_ship.ds_bill_charge,
dba.disp_ship.ds_status, dba.disp_ship.ds_bill_date, dba.disp_ship.ds_ship_date, dba.disp_ship.ds_ship_type, dba.disp_ship.movecode,
dba.companies.co_id, dba.companies.co_name, dba.current_shipments.cs_id, dba.current_shipments.cs_event_count, dba.current_shipments.cs_routed, dba.current_shipments.cs_assigned, dba.current_shipments.cs_completed,
(CASE ds_status WHEN 'A' THEN 'TEMPLATE'
WHEN 'C' THEN 'CANCELLED'
WHEN 'D' THEN 'DECLINED'
WHEN 'E' THEN 'QUOTED'
WHEN 'F' THEN 'OFFERED'
WHEN 'H' THEN 'PENDING'
WHEN 'K' THEN 'OPEN'
WHEN 'N' THEN 'AUTHORIZED'
WHEN 'Q' THEN 'AUDIT REQUIRED'
WHEN 'T' THEN 'AUDITED'
WHEN 'W' THEN 'BILLED'
END) AS 'BILLING STATUS',
(CASE ds_ship_type WHEN '2201' THEN 'MONTREAL'
WHEN '2202' THEN 'DRYVAN'
WHEN '2203' THEN 'BROKERAGE'
WHEN '2204' THEN 'OLD BROKERAGE (NO GOOD)'
WHEN '2205' THEN 'LIFTING'
WHEN '2206' THEN 'WAREHOUSE'
END) AS 'DIVISION'
from dba.disp_ship
inner join dba.companies ON dba.disp_ship.ds_billto_id=dba.companies.co_id
inner join dba.current_shipments ON dba.disp_ship.ds_id=DBA.current_shipments.cs_id
您是否根据问题中包含的代码尝试使用 CASE
表达式?
CASE WHEN dba.current_shipments.cs_event_count = dba.current_shipments.cs_completed
THEN 'COMPLETE'
ELSE 'INCOMPLETE'
END
AS Status