SQL过滤表中的数据

时间:2017-07-31 08:42:58

标签: sql sql-server select cursor filtering

我有销售文件和发票的表格,例如

SalesDoc | Invoice | InvoiceType
------------------------------------
Doc1     | Inv1    | A
Doc1     | Inv2    | B
Doc1     | Inv3    | C
Doc2     | Inv1    | A
Doc2     | Inv2    | C
Doc3     | Inv1    | A
Doc3     | Inv2    | B

每份销售凭证都可以有多个发票,例如标准发票或形式......

我需要过滤该表以接收下表

因此,如果对于Sales doc存在incoice C,则仅显示该销售文档的此行, 如果没有,则检查类型B,然后检查类型A.

SalesDoc | Invoice | InvoiceType
-----------------------------------
Doc1     | Inv3    | C
Doc2     | Inv2    | C
Doc3     | Inv2    | B

我知道我可以在临时表中存储销售文档,然后循环(使用游标)和过滤源表来删除不必要的记录 但我想确定是否有任何其他解决方案而不是循环来实现它

由于 托梅克

1 个答案:

答案 0 :(得分:0)

根据更大的逻辑,您可以使用聚合执行此操作:

Select  SalesDoc, Max(Invoice) as Invoice, Max(InvoiceType) as InvoiceType
FROM MYSALESTABLE
GROUP BY SalesDoc