2010-12-20 19 views
2

以下のクエリは、2009年度と2010年度のカリフォルニアの製品間パーセンテージを計算します。私は残りの状態を計算するように割り当てられています(STATESテーブルを参照してください)。状態の割合を計算する方法がSQL Serverにありますか?私は現在、一度に各状態を手動で計算しています。私は誰かがこれで私を助けることができるかどうか疑問に思っていた。ハッピーホリデーみんな! は(カーソルがそれを行うならば、私は考えていた。私が原因データの整合性に別々の状態テーブルを使用する必要があり、注意してください、しかし、私はまだないです。)SQL SERVERクエリのヘルプ(カーソルを使用)

DECLARE @LOCATION VARCHAR(2) 
SET @state = 'CA' 

SELECT NUMBER1/CAST(NUMBER2 as FLOAT) as PERCENTAGE 
FROM 
(
    SELECT COUNT (PRODUCT) as NUMBER1 
    FROM SOMETABLE1 
    WHERE LOCATION = @state 
    AND DATE >='10/1/2008' 
    AND DATE <' 10/1/2009' 
)X, 

(
    SELECT COUNT (PRODUCT) as NUMBER2 
    FROM SOMETABLE2 
    WHERE LOCATION = @state 
    AND DATE >='10/1/2009' 
    AND DATE <' 10/1/2010' 
)Y 

PERCENTAGE 
1.400742 


SELECT state 
FROM STATES 

STATE 
CA 
AZ 
TX 
NV 
NM 
UT 
OR 
CO 
WA 
+4

PLEEEEAAAAASSSSSEEEEE! 'Cursor 'を使わないでください。 –

+0

ええ、たくさんの質問があっても、あなたの15の質問に対して4つの答えしか受け入れられません....あなたは答えを受け入れるべきです – Lamak

答えて

2

あなたはSTATESテーブルに参加することができます。これらの線に沿ったもの:

SELECT X.STATE, X.NUMBER1/CAST(Y.NUMBER2 as FLOAT) as PERCENTAGE 
FROM 
(
    SELECT S.STATE, COUNT(*) as NUMBER1 
    FROM SOMETABLE1 AS S1 
    INNER JOIN STATES AS S ON S1.LOCATION = S.STATE 
    AND S1.DATE >='10/1/2008' 
    AND S1.DATE < '10/1/2009' 
    GROUP BY S.STATE 
)X, 

(
    SELECT S.STATE, COUNT (*) as NUMBER2 
    FROM SOMETABLE2 AS S2 
    INNER JOIN STATES AS S ON S2.LOCATION = S.STATE 
    AND S2.DATE >='10/1/2009' 
    AND S2.DATE < '10/1/2010' 
    GROUP BY S.STATE 
)Y 
WHERE X.STATE = Y.STATE