如果客户有观看角斗士,则使用 OVER(),然后 1 否则 0 SQL SERVER

2024-01-02

我想我需要一些指导来了解我的查询中有什么问题。我正在尝试做

Watched_Gladiator=CASE WHEN FilmName IN (CASE WHEN FilmName LIKE '%Gladiator%' THEN 1 END) then  OVER(PARTITION BY Cust_Nr) THEN 1 ELSE 0 END

也尝试过这个:

Watched_Gladiator=CASE WHEN FilmName IN (CASE WHEN FilmName LIKE '%Gladiator%' THEN Filmnamne END) then  OVER(PARTITION BY Cust_Nr) THEN 1 ELSE 0 END

我目前收到的错误是这样的:

Incorrect syntax near the keyword 'OVER'.

这基本上就是我的数据的样子

Cust_Nr    Date        FilmName                     Watched Gladiator      
    157649306   20150430    Gladiator                        1
    158470722   20150504    Nick Cave: 20,000 Days On Earth  0
    158467945   20150504    Out Of The Furnace               0
    158470531   20150504    FilmA                            0
    157649306   20150510    Gladiator                        1
    158470722   20150515    Gladiator                        1

我想创建一个列(1 或零)来显示客​​户是否观看过《角斗士》,然后显示 1 ELSE 0。我该怎么做?

我创建了一个测试列,尝试使用简单的 LIKE '%Gladiator%' THEN 1 ELSE 0。此解决方案的问题是,如果客户观看了多次,它将多次显示 1(一)。我只需要 1 或零。

我觉得我已经非常接近找到解决方案了。我对使用 OVER() 和 CASE WHEN 很陌生,但很享受这种刺激:=)


所以你是说:

SELECT Cust_Nr, Date, FilmName, 
       CASE WHEN FilmName LIKE '%Gladiator%' THEN 1 ELSE 0 END as WatchedGladiator
FROM YourTable
WHERE YourColumn = @somevalue

不起作用?因为根据你给出的数据,应该是这样。

EDIT:

根据蒂姆的评论,我只需将这一点添加到查询中即可。

   SELECT Cust_Nr, Date, FilmName, WatchedGladiator
   FROM
   (
      SELECT Cust_Nr, Date, FilmName, 
             CASE WHEN FilmName LIKE '%Gladiator%' THEN 1 ELSE 0 END as WatchedGladiator
      FROM YourTable
      WHERE YourColumn = @somevalue
   ) as wg
   WHERE WatchedGladiator = 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果客户有观看角斗士,则使用 OVER(),然后 1 否则 0 SQL SERVER 的相关文章

随机推荐