【问题标题】:SQL filtering data in tableSQL过滤表中的数据
【发布时间】:2017-07-31 16:47:12
【问题描述】:

我有一张包含销售文件和发票的表格,例如

销售文件 |发票 |发票类型 ---------------------------------- 文档1 | Inv1 |一个 文档1 | Inv2 |乙 文档1 | Inv3 | C 文档2 | Inv1 |一个 文档2 | Inv2 | C 文档3 | Inv1 |一个 文档3 | Inv2 |乙

每个销售单据可以有多个发票,例如标准发票或形式发票..

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

因此,如果销售单据存在 incoice C,则仅显示该销售单据的这一行, 如果不是,则检查类型 B,然后检查类型 A。

销售文件 |发票 |发票类型 ---------------------------------- 文档1 | Inv3 | C 文档2 | Inv2 | C 文档3 | Inv2 |乙

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

谢谢 托梅克

【问题讨论】:

    标签: sql sql-server select cursor filtering


    【解决方案1】:

    根据更大的逻辑,您可以使用聚合来做到这一点:

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

    【讨论】:

    • 谢谢,稍加修改效果很好。我真正的发票类型是(从最重要的) 5 , M , U 。所以我的最终查询看起来像
       SELECT DeliveryNo, max(InvoiceNo), MAX(DocTypeVal) FROM ( Select *, CASE WHEN DocType = 'M' THEN 3 WHEN DocType = '5' THEN 2 WHEN DocType = 'U' THEN 1 END as DocTypeVal FROM ##temp ) as t GROUP BY DeliveryNo 
    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多