【问题标题】:Need the sql query based on some condition需要基于某些条件的sql查询
【发布时间】:2020-07-14 14:41:23
【问题描述】:
select CardCode, ItemCode, T0.DocDate, ''[CustomerType]  from OINV T0 inner Join INV1 T1 on T1.DocEntry = T0.DocEntry and year(T0.DocDate) >= year(getdate()) -4 

我又添加了一个名为“CustomerType”的列,看起来像“New”、“Existing”、“One more Product

根据docdateitemcode列检查的条件:

  1. 例如现在是 2020 年,如果 2019 年没有销售,那么 customertype 是 = 'New' else 'Existing' 。需要根据'CardCode'栏目检查

  2. 例如:那些客户类型“现有”我需要检查他们之前是否购买过商品代码,如果他们购买了,那么客户类型保持为“现有”,如果不应该反映为“另一种产品” .需要根据'ItemCode'栏目检查

样本结果集:

CardCode    ItemCode    DocDate     CustomerType
C-SGD-2748  V0796-0038  2017-01-24 
C-SGD-1489  V0796-0066  2020-06-10 
C-SGD-2748  V0796-0106  2019-01-15  
C-SGD-1489  V0796-0130  2019-05-17 
C-SGD-2652  V0805-0001  2016-12-08 

【问题讨论】:

  • (1) 用您正在使用的数据库标记您的问题。 (2) 在问题中显示你想要的结果。 (3) 你也可以稍微清理一下解释。很难跟上。

标签: sql sql-server sql-server-2016


【解决方案1】:

您可以使用case 和窗口函数:

select t.*,
       (case when min(docdate) over (partition by cardcode) >= '2020-01-01'
             then 'New'
             when row_number() over (partition by cardcode, itemcode order by docdate) > 1
             then 'existing'
             else 'one more product'
        end) as customertype

我发现这些类型相当混乱。但是,这似乎正是您所描述的。

【讨论】:

  • (按卡码分区)>= '2020-01-01' 。是硬编码的吗?可以按年份计算。基本上新的手段在上一年没有任何交易(零)记录。
  • 感谢您的询问。基本上,CustomerType 'New' 意味着上一年没有任何交易(零)记录
  • @VignaHariKarthik 。 . .您可以使用year(getdate()),但您的问题特别提到了日期,这就是我使用它的原因。
  • 如果 2019 年没有销售但在 2020 年有销售,那么我的“新”客户类型应该可以工作,那么它是基于文档日期的新客户。如何修改我的查询?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多