SQL根据多个值但只有一个条件选择多行

时间:2017-09-12 14:15:04

标签: sql

这是我在论坛上的第一个问题,但修复我的问题需要很长时间。

说明:

在样本中,如果成本代码" C"在该范围内,其他行也应包含在列表中。

INVOICE|VEHICLE|JOB_DATE|COSTCODE|TOTAL|
2017001|UNIT001|01012017|   A    |  100| - OK
2017001|UNIT001|01012017|   C    |  100| - OK
2017001|UNIT002|01012017|   A    |  100| - FALSE
2017001|UNIT002|01012017|   B    |  100| - FALSE
2017001|UNIT003|01012017|   A    |  100| - OK
2017001|UNIT003|01012017|   C    |  100| - OK
2017022|UNIT001|22012017|   A    |  100| - OK
2017022|UNIT001|22012017|   C    |  100| - OK
2017022|UNIT004|22012017|   A    |  100| - FALSE
2017022|UNIT004|22012017|   B    |  100| - FALSE

Expected result:
INVOICE|VEHICLE|JOB_DATE|COSTCODE|TOTAL|
2017001|UNIT001|01012017|   A    |  100|
2017001|UNIT001|01012017|   C    |  100|
2017001|UNIT003|01012017|   A    |  100|
2017001|UNIT003|01012017|   C    |  100|
2017022|UNIT001|22012017|   A    |  100|
2017022|UNIT001|22012017|   C    |  100|

唯一值是" Invoice,Vehicle,Jobdate"之间的组合。然后,如果一行有"发票,工具,工作日和成本代码=" C" "它应该显示所有行" 发票,工具,工作日期"等于包括Costcode" C"

在内的行

我希望这个解释比我以前的解释好一点。

表名是:

SELECT INVOICE_KEY_FW,VEHICLE_ID_FW,JOB_DATE_FW,COSTCODE_FW,TOTAL_NETT_FW,
FROM PURCHASE_INVOICE_DETAILS_FW 
WHERE

特定单位的成本分为成本代码,并在特定日期(特定单位)(每张发票)执行。 我们收到批量发票,其中一个单位可以在发票上两次(但从不在同一天)。 如果成本代码(在这种情况下为" C")在发票上,则具有相同作业日期和相同车辆ID的所有发票行应包含在预期结果中。

1 个答案:

答案 0 :(得分:1)

我没有sql编辑器,但这应该可以。

select INVOICE_NUMBER, UNITNUMBER, DATE, COST_CODE, COSTS 
from INVOICE_DETAILS
where UNIT_NUMBER in (select distinct UNIT_NUMBER 
                      from INVOICE_DETAILS
                      WHERE COST_CODE = 'C')

我认为有更好的方法,但我应该先尝试。