【问题标题】:How to use Result's column with Having clause如何使用带有Having 子句的Result 列
【发布时间】:2014-09-15 11:01:44
【问题描述】:

我有一个存储过程,

我想对列 IsUserFruitEaterIsUserOnSite 使用 HAVING 子句,但它说列不存在。

不确定如何使用列,必须有一种方法可以使用存储过程结果的列...

ALTER procedure [dbo].[Risks_GetFruitCratesForUser]
(
    @UserID VARCHAR(200),
    @URLFilter varchar(256)
)
AS
SELECT DISTINCT 
    Fruits.*
    ,FruitsCrate.* dbo.IsUserRegularFruitEater(@UserID, FruitsCrate.FutureID) AS 
    IsUserFruitEater
    ,dbo.IsUserOnSite(@UserID, FruitsCrate.FID) AS IsUserOnSite
    ,COALESCE(doThis.deeraw, - 1) AS deeraw
    ,COALESCE(doThat.HeroSheema, - 1) AS HeroSheema
    ,Jootey.deeraw * Jootey.HeroSheema AS BigBang
FROM someTable....
WHERE blahblah NOT NULL
    AND blahblah2 LIKE "abc"
HAVING Min(IsUserFruitEater) > 0
    OR Min(IsUserOnSite) > 0

【问题讨论】:

  • 您没有GROUP BY 所需的HAVING。所以你可以把这些条件放在 WHERE 子句中:WHERE dbo.IsUserOnSite(@UserID, FruitsCrate.FID) > 0 AND ...
  • 你少了一个逗号FruitsCrate.* dbo.IsUserRegularFruitEater
  • @TI 感谢您的编辑
  • @Bulat Having 通常与group by 一起使用,但不是必需的。

标签: sql sql-server stored-procedures sql-server-2012


【解决方案1】:

使用子查询和where 子句:

SELECT t.*
FROM (SELECT DISTINCT Fruits.*, FruitsCrate.*
            dbo.IsUserRegularFruitEater(@UserID, FruitsCrate.FutureID) AS IsUserFruitEater,
            dbo.IsUserOnSite(@UserID, FruitsCrate.FID) AS IsUserOnSite,
            COALESCE(doThis.deeraw, -1) As deeraw  , COALESCE(doThat.HeroSheema, -1) As HeroSheema,
            Jootey.deeraw * Jootey.HeroSheema As BigBang
      From someTable....
      WHERE blahblah NOT NULL AND blahblah2 LIKE "abc"
     ) t
WHERE IsUserFruitEater > 0 or IsUserOnSite > 0;

我不确定min() 的用途。您没有group by,这是使用having 子句的问题。

【讨论】:

  • 正是我所追求的,谢谢,15 分钟内接受
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 2017-12-22
  • 1970-01-01
相关资源
最近更新 更多