2014-09-15 2 views
1

У меня есть хранимая процедура,Как использовать столбец результата с Имея пункт

Я хочу использовать HAVING пункт с колоннами IsUserFruitEater и IsUserOnSite, но он говорит столбец не существует.

Не знаете, как использовать столбцы, там должен быть способ использовать хранимые столбцы Порядок действий Результат по ...

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 
+0

У вас нет 'GROUP BY', который требуется для' HAVING'. Поэтому вы можете просто поставить эти условия в предложение WHERE: 'WHERE dbo.IsUserOnSite (@UserID, FruitsCrate.FID)> 0 И ...' – Bulat

+0

Вам не хватает запятой 'FruitsCrate. * Dbo.IsUserRegularFruitEater' –

+0

@TI thank вы для редактирования – Mathematics

ответ

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.

+0

именно то, что было после, спасибо, принято за 15 минут – Mathematics

Смежные вопросы