首页 > 解决方案 > 需要一些建议来编写一个 sql 查询

问题描述

我有一个包含 [Date]、[ProductId]、[NewProduct] 列的视图。其中 [Date] 始终为 [yyyy-mm-01],因此对于给定月份,对于任何 productId,[NewProduct] 可以是 1 或 0。我正在尝试基于此创建另一个视图,但我想实现一个更改。如果某个产品在给定月份被标记为 [NewProduct],那么它应该在该年的剩余月份被标记为 [NewProduct]。

示例这是我的原始视图:ProductView1

产品视图1

如您所见,产品:261220 被标记为 2018-05-01 的新产品。我想要的是我想创建另一个从这个视图派生的视图,它应该有 product: 261220 标记为 2018 年剩余时间的新产品。

我正在尝试编写这样的查询:

创建视图 [dbo].[ProductView2]
作为
    选择 [ProductView1]。[日期]
            ,[ProductView1].[ProductId]
            ,Case WHEN ([ProductView1Prev].[New Product] = 1 AND Month([ProductView1Prev].[Date]) <> 12)
                那么 1
                ELSE [ProductView1].[新产品]
            END AS [新产品]
    FROM [dbo].[ProductView1]
    左连接
            [ProductView1] 作为 [ProductView1Prev]
            ON [ProductView1].CustomerId = [ProductView1Prev].CustomerId
    和 [ProductView1].[Date] = dateadd(month,+1,[ProductView1Prev].[Date])

但是新视图将产品标记为:261220 为下个月的新产品,而不是当年剩余的所有月份。

根据我的查询,ProductView2 看起来像这样:

产品视图2

我不确定如何实现所需的输出。

标签: sqlsql-server

解决方案


尝试使用带有检查条件的“更新后触发器”(通过 where 子句比本月大的月份)并检查该列是否已更新,然后也更新其他列。


推荐阅读