0

このクエリを入力すると、次のエラーが発生します。

SELECT E.event, 
       ED.location, 
       ED.doe, 
       ED.category, 
       ( ( ED.numofdataset / ED.numoftimesloc ) * 100 )                    AS 
       LOGLOC, 
       ( ( ED.numofdataset / ED.numoftimesdoe ) * 100 )                    AS 
       LOGDOE, 
       ( ( ED.numofdataset / ED.numoftimescat ) * 100 )                    AS 
       LOGCAT, 
       (( ( ED.numoftimesloc * ( Log(logloc) ) ) + 
           ( ED.numoftimesdoe * ( Log(logdoe) ) ) + ( ED.numoftimescat * 
                                                      ( Log(logcat) ) ) )) AS 
       FINALRANK 
FROM   event E, 
       eventdetail ED 
WHERE  E.eventid = ED.eventid 
       AND ED.location = 'LONDON' 
       AND ED.category = 'Sports' 
ORDER  BY finalrank DESC; 

コマンドコントローラーは、「LOGLOC」が「フィールドリスト」の不明な列であることを通知します。誰かが私が間違っていることと、LOG()関数の使用が正しいかどうかを教えてもらえますか?

4

2 に答える 2

2

エイリアス列に対して計算を実行することはできません。

これを試して:

SELECT f.event, 
       f.location, 
       f.doe, 
       f.category, 
       f.logloc, 
       f.logdoe, 
       f.logcat, 
       (( ( f.numoftimesloc * ( Log(f.logloc) ) ) + 
             ( f.numoftimesdoe * ( Log(f.logdoe) ) ) + ( 
           f.numoftimescat * ( Log(f.logcat) ) ) )) AS FINALRANK 
FROM   (SELECT E.event, 
               ED.location, 
               ED.doe, 
               ED.category, 
               ( ( ED.numofdataset / ED.numoftimesloc ) * 100 ) AS LOGLOC, 
               ( ( ED.numofdataset / ED.numoftimesdoe ) * 100 ) AS LOGDOE, 
               ( ( ED.numofdataset / ED.numoftimescat ) * 100 ) AS LOGCAT, 
               ed.numoftimesloc, 
               ed.numoftimesdoe, 
               ed.numoftimescat 
        FROM   event E, 
               eventdetail ED 
        WHERE  E.eventid = ED.eventid 
               AND ED.location = 'LONDON' 
               AND ED.category = 'Sports' 
        ORDER  BY finalrank DESC) f 
于 2013-03-06T18:52:06.590 に答える
0

テーブルにないため、既知の列ではありません。ここでエイリアスを作成しています。

((ED.numofdataset / ED.numoftimesloc) * 100) AS LOGLOC

SELECTただし、エイリアス列は句の他の場所で参照することはできません。(その句が解析されるまで実際には存在しないように考えてください。したがってORDER BY、の結果に基づいて動作しているのSELECTに対し、SELECTはテーブルに作用しているため、などの他の特定の句で使用できます。 。)

コードの重複を減らすために私が気付いていないSQLのトリックがあるかもしれませんが、そうでない場合は、計算を直接実行する必要があるかもしれません。

Log((ED.numofdataset / ED.numoftimesloc) * 100)
于 2013-03-06T18:54:49.210 に答える