2

重複の可能性:
SQLサーバーは計算列を使用します

これを行う方法はありますか?

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を参照することは可能ですか?

4

2 に答える 2

2

スティック

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

クエリの周り。外側のSELECTの内側に配置されたら、WHERE句でエイリアス列を使用できます。

于 2012-10-08T20:59:06.883 に答える
2

句でそれらを参照する場合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)
于 2012-10-08T20:59:24.693 に答える