【发布时间】:2020-06-08 05:16:51
【问题描述】:
我有一个客户表的情况,我需要从一个结构为字符串的列中找到文档编号,其中前 4 个字符代表文档的类型(例如,'BILL000000000001'、'PYMT000000000001') .这些文件中的每一个也有一个相应的文件日期。我想用 max(DocDate) 获取 CustomerNumber 其中 DocType 是 BILL 并返回 CustomerNumber 和 DocDate。这部分相当简单,没有任何挑战。
我的问题是一些客户还没有以“BILL”开头的文档。对于那些,我想获取与另一个字符串 XXXX 匹配的 CustomerNumber 和 max(DocDate) 作为前 4 个字符。本质上,我需要使用某种条件表达式来获取 BILL 类型的 CustomerNumber 和 max(DocDate) 或 Customer Number 和 max(DocDate) 用于 XXXX 类型的记录。问题是客户可能同时存在 BILL 和 XXXX 类型。如果存在 BILL,我想为该客户选择 CustomerNumber 和 max(DocDate)。但是,如果存在 XXXX 类型但没有可用的 BILL 类型文档,我需要 CustomerNumber 和 max(DocDate) 用于类型 XXXX。
我曾考虑使用 EXCEPT 和 UNION,但我认为这两个选项都不适合我。这是我的带有EXCEPT的SQL,如果它有帮助的话。
select CustomerNumber, max(DocDate)
FROM Table1
where substring(DocumentNumber,1,4) = 'BILL'
group by CustomerNumber
EXCEPT
select CustomerNumber, max(DocDate)
from Table1
where substring(umDocumentNumber,1,4) = 'MISC'
group by CustomerNumber
【问题讨论】:
-
select CustomerNumber, max(DocDate) FROM Table1 where substring(DocumentNumber,1,4) IN ( 'BILL','MISC') GROUP BY CustomerNumber? -
样本数据和期望的结果值得解释。
标签: sql sql-server select conditional-statements aggregate-functions