WHERE子句中的SQL派生字段

WHERE子句中的SQL派生字段,sql,sql-server,Sql,Sql Server,可能重复: 有没有办法做到这一点: select Name, (SELECT Max(reference) from Rematch WHERE Gender='M' and convert(varchar,getdate,103) = '08/10/2012' ) As MaxReferenceMale, (SELECT Max(reference) from Rematch WHERE Ge

可能重复:

有没有办法做到这一点:

select Name, 
    (SELECT Max(reference) 
        from Rematch 
        WHERE Gender='M' and convert(varchar,getdate,103) = '08/10/2012'
    ) As MaxReferenceMale, 
    (SELECT Max(reference) 
        from Rematch 
        WHERE Gender='F' and convert(varchar,getdate,103) = '08/10/2012'
    ) As MaxReferenceFemale
WHERE (Gender='M' and Reference > MaxReferenceMale) Or 
    (Gender='F' and Reference > MaxReferenceFemale)
我意识到也许有更好的方法来写这个问题。可以在WHERE子句中引用MaxReferenceFemale和MaxReferenceMale吗?

粘贴a

SELECT * FROM (...) WHERE ...
围绕你的问题。一旦WHERE子句位于外部SELECT的内部,就可以在其中使用别名列。

粘贴一个

SELECT * FROM (...) WHERE ...

围绕你的问题。一旦WHERE子句位于外部SELECT子句的内部,就可以在其中使用别名列。

如果要在
WHERE
子句中引用别名列,则需要一个子查询:

SELECT *
FROM
(
   select Name,  Gender, Reference 
      (SELECT Max(reference) 
        from Rematch 
        WHERE Gender='M' and convert(varchar,getdate,103) = '08/10/2012') As MaxReferenceMale, 
      (SELECT Max(reference) 
        from Rematch WHERE Gender='F' and convert(varchar,getdate,103) = '08/10/2012') As MaxReferenceFemale
) x
WHERE (Gender='M' and Reference > MaxReferenceMale) 
    Or (Gender='F' and Reference > MaxReferenceFemale)
查看原始查询,查询中似乎缺少一个
FROM
子句,因此子查询的语法类似于此:

select x.name, x.MaxReferenceMale, x.MaxReferenceFemale
from rematch r
left join
(
    select Name, 
        (SELECT Max(reference) 
            from Rematch 
            WHERE Gender='M' and convert(varchar,getdate,103) = '08/10/2012'
        ) As MaxReferenceMale, 
        (SELECT Max(reference) 
            from Rematch 
            WHERE Gender='F' and convert(varchar,getdate,103) = '08/10/2012'
        ) As MaxReferenceFemale
    from rematch
) x
    on r.name = x.name
WHERE (r.Gender='M' and r.Reference > x.MaxReferenceMale) Or 
    (r.Gender='F' r.and Reference > x.MaxReferenceFemale)

如果要在
WHERE
子句中引用它们,则需要一个子查询:

SELECT *
FROM
(
   select Name,  Gender, Reference 
      (SELECT Max(reference) 
        from Rematch 
        WHERE Gender='M' and convert(varchar,getdate,103) = '08/10/2012') As MaxReferenceMale, 
      (SELECT Max(reference) 
        from Rematch WHERE Gender='F' and convert(varchar,getdate,103) = '08/10/2012') As MaxReferenceFemale
) x
WHERE (Gender='M' and Reference > MaxReferenceMale) 
    Or (Gender='F' and Reference > MaxReferenceFemale)
查看原始查询,查询中似乎缺少一个
FROM
子句,因此子查询的语法类似于此:

select x.name, x.MaxReferenceMale, x.MaxReferenceFemale
from rematch r
left join
(
    select Name, 
        (SELECT Max(reference) 
            from Rematch 
            WHERE Gender='M' and convert(varchar,getdate,103) = '08/10/2012'
        ) As MaxReferenceMale, 
        (SELECT Max(reference) 
            from Rematch 
            WHERE Gender='F' and convert(varchar,getdate,103) = '08/10/2012'
        ) As MaxReferenceFemale
    from rematch
) x
    on r.name = x.name
WHERE (r.Gender='M' and r.Reference > x.MaxReferenceMale) Or 
    (r.Gender='F' r.and Reference > x.MaxReferenceFemale)

也称为子查询或派生表。实际上,您需要给子查询加上别名,例如,
SELECT*FROM(…)子查询别名,其中…
您不需要给外部查询加上别名,除非您将其连接到某个对象,但最好将所有内容都加上别名。@monitorjbl-取决于DBMS。在SQL Server中,它是必需的。@Martin Smith-啊,我不知道,我以前从未使用过SQL Server。@monitorjbl,感谢您提供了简单有效的解决方案。也称为子查询或派生表。实际上,您需要给子查询加上别名,例如,
SELECT*FROM(…)子查询别名,其中…
您不需要给外部查询加上别名,除非您将其连接到某个对象,但最好将所有内容都加上别名。@monitorjbl-取决于DBMS。在SQL Server中,这是必须的。@Martin Smith-啊,我不知道,我以前从未使用过SQL Server。@monitorjbl,感谢您提供了简单而有效的解决方案。@Tim Schmelter,SQL Server。很抱歉遗漏了这一点。@Tim Schmelter,SQL Server。很抱歉错过了这个。