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。很抱歉错过了这个。