Рассчитать отличное количество при объединении двух таблиц - PullRequest
3 голосов
/ 05 октября 2010
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: Я обновил запрос и таблицы поиска.

Ответы [ 2 ]

1 голос
/ 05 октября 2010

Кажется, у вашей предполагаемой схемы есть недостаток:

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

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

1 голос
/ 05 октября 2010

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

;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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...