2010-10-05 78 views
3
id1  id2 year State Gender  
==== ====== ====== ===== =======  
1  A  2008 ca  M  
1  B  2008 ca  M  
3  A  2009 ny  F 
3  A  2008 ny  F  
4  A  2009 tx  F 

select 
    state, gender, [year], 
    count (distinct(cast(id1 as varchar(10)) + id2)) 
from 
    tabl1 
group by state, gender, [year] 

我可以通過狀態查找不同的計數。 現在我需要通過明智的城市找到不同的計數。像CA - 3個城市.. sfo,la,sanjose。我有一個查找表,我可以找到狀態和城市。計算加入兩個表格時的不同計數

table2 - city  
    ====   
    cityid name 
    ==== ==== 
    1 sfo     
    2 la      
    3 sanjose 

    table 3 - state 
    ==== 
stateid name 
    ==== ==== 
    1 CA 
    2 Az 

table 4 lookup state city 
==== 
pk_cityId pk_state_id 
1    1 
2    1 

select state,city,gender, [year], 
     count (distinct(cast(id1 as varchar(10)) + id2)) 
    from 
     tabl1 p 
    group by state, gender, [year],city 

此查詢找到城市和州名稱。

select c.city,s.state from city_state sc 
inner join (select * from state)s on sc.state_id = s.state_id 
inner join (select * from city)c on sc.city_id = c.city_id 

我做類似這樣的查詢中使用的查找表,但問題是,我得到整個國家的重複計數和計數相同的,則重複在該州各城市。例如:對於ca:10的計數,城市的計數應該像La - 5,sanjose - 4,sfo-1。

但用我的查詢得到sfo - 10,la-10,sanjose-10 ..我無法找到較低級別的計數。任何幫助,將不勝感激。

更新: 我已更新查詢和查詢表。

+0

拉斯維加斯,CA?嗯... – 2010-10-05 09:47:41

+0

我的壞...我會改變它:) – jero 2010-10-05 16:54:06

+0

ID1在第一個表中代表什麼?這是城市ID嗎? – 2010-10-05 18:45:37

回答

1

我認爲你需要像下面這樣,但W/O的進一步信息不能確定:

;WITH DistinctState AS 
(
    SELECT DISTINCT 
      id1 
     , id2 
     , [year] 
     , [State] 
     , Gender 
    FROM tab1 
) 
SELECT s.state 
,  c.city 
,  gender 
,  [year] 
,  count(*) 

FROM  DistinctState s 
    INNER JOIN 
     tab2 c 
    ON s.id1 = c.id1 
AND s.id2 = c.id2 

GROUP BY 
     s.state 
    , c.city 
    , gender 
    , [year] 
+0

我更新了查找表並且查詢 – jero 2010-10-05 18:13:28

+0

試過了這個。我得到了在每個城市重複的狀態智能計數。 – jero 2010-10-05 22:43:49

1

你的隱含模式似乎有一個缺陷:

你試圖獲得城市級別聚合,但是您將根據狀態將您的數據表(表1)加入到城市表(表2)中。這將導致處於相同狀態的每個城市具有相同的聚合值;在你的情況下:加利福尼亞州的所有州的計數爲10.

你能爲你的兩個表提供實際的DDL語句嗎?也許你還有其他專欄(city_id?),它們可能會爲你提供必要的數據來糾正你的查詢。

+0

我更新了查找表和查詢 – jero 2010-10-05 18:10:55

+0

@jero:問題依然存在。最簡單的解決方法是將city_id添加到table1或將state_id替換爲city_id(根據新的模式)。 – etliens 2010-10-05 22:22:46