需要基于条件的sql查询

xu3bshqb  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(261)

这是我的sql查询

select CardCode, ItemCode, DocDate, DocYear from OINV

我需要添加更多名为customertype的列
新=>如果没有基于去年的采购交易。2020去年是2019年,2019去年是20182018去年是2017年,2017去年是2016年,以此类推。那么customertype就是“new”。
onemoreproduct=>项目代码基于每个客户的项目代码历史记录2020、2019、2018、2017等,如果是第一次购买此项目代码。那么customertype就是“onemoreproduct”
existing=>如果上述两个条件不符,则为“existing”
我需要根据这三种类型写一个案例。

j8yoct9x

j8yoct9x1#

在SQLServer2008中,可用的窗口函数是有限的。一种方法使用 case 表达式:

select o.*,
       (case when not exists (select 1
                              from oinv o2
                              where o2.cardcode = o.cardcode and
                                    o2.docyear = o.docyear - 1
                             )
             then 'New'
             when row_number() over (partition by cardcode, itemcode order by date) = 1
             then 'OneMoreProduct'
             else 'Existing'
        end) as customertype
from oinv o;
mgdq6dx1

mgdq6dx12#

您可能需要为列添加case语句。
您的规则并不明显,因为您没有发布示例ddl和示例数据。如果你想要一个好的答案,那么发布ddl,插入示例数据…然后问问题。请参见:https://stackoverflow.com/help/minimal-reproducible-example
但这里有一个通用的答案。

select CardCode, ItemCode, DocDate, DocYear ,
    [customertype] =
    CASE    
        WHEN 1=1 Then 'new'
        WHEN 2=2 Then 'onemoreproduct'
        ELSE 'existing'
    END
FROM OINV

你会根据自己的需要对when语句进行“编码”。

相关问题