2010-12-20 96 views
2

下面的查询计算了加利福尼亚州2009财年与2010财年之间产品的预测值。我被分配来计算其余的状态(请参阅州表)。 SQL SERVER中有没有可以计算状态百分比的方法?我目前手动计算每个状态。我想知道是否有人可以帮助我。大家节日快乐! (请注意,我必须seperately使用状态表,由于数据的完整性。我在想,如果游标会做,但我还没有。)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!不要使用'光标' – 2010-12-20 20:09:40

+0

是的,只有4个人接受了你的15个问题的答案,即使他们很多都是正确的......你应该接受提供给你的答案 – Lamak 2010-12-20 21:07:56

回答

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