2010-10-05 4 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 

я сделал похож на этот запрос, используя справочную таблицу, но проблема в том, что я получаю отчетливый подсчет во всех государствах и то же ЧИСЛО графа повторяюсь для каждого города в государстве.

ex: для подсчета для ca: 10, тогда граф для городов должен быть как La - 5, sanjose - 4, sfo-1.

, но с моим запросом я получаю как sfo - 10, la-10, sanjose-10 .. я не смог найти счет для более низкого уровня. любая помощь будет оценена по достоинству.

UPDATE: Я обновил запрос и таблицы поиска.

+0

Las Vegas, CA? Uh-huh ... –

+0

мой плохой ... k i ll меняю его. :) – jero

+0

Что означает ID1 в первой таблице? Это идентификатор города? –

ответ

1

Я думаю, что нужно что-то вроде следующего, но не может быть уверен, что без дополнительной информации:

;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

+0

попробовал this.still, я получаю состояние мудрый счет, повторяющийся в каждом городе. – jero

1

Ваша подразумеваемой схема, кажется, есть недостаток:

Вы пытаетесь получить агрегаты уровня города, но вы присоединяетесь к своей таблице данных (таблица1) к своей городской таблице (таблица 2) в зависимости от состояния. Это приведет к тому, что КАЖДЫЙ город в том же состоянии будет иметь одни и те же совокупные значения; в вашем случае: все штаты штата Калифорния, имеющие счет 10.

Можете ли вы предоставить фактические заявления DDL для ваших двух таблиц? Возможно, у вас есть другие столбцы (city_id?), Которые могут предоставить необходимые данные для исправления вашего запроса.

+0

i обновил таблицу поиска и запрос – jero

+0

@jero: проблема все еще существует. Простейшим решением было бы либо добавить city_id в таблицу1, либо заменить state_id на city_id (согласно вашей новой схеме). – etliens

Смежные вопросы