3


0

2つのテーブルを結合する際の個別のカウントを計算する
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]

私はstatewiseを通じて明確なカウントを見つけることができました。 今、私は都市ごとに明確なカウントを見つける必要があります。 カリフォルニアのように-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 .. 下位レベルのカウントを見つけることができませんでした。 任意の助けがいただければ幸いです。

  • UPDATE:*クエリとルックアップテーブルを更新しました。

2 Answer


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]


1


暗黙のスキーマには欠陥があるようです:

都市レベルの集計を取得しようとしていますが、状態に基づいてデータテーブル(table1)を都市テーブル(table2)に結合しています。 これにより、同じ州のすべての都市に同じ集計値が設定されます。あなたの場合:すべてのカリフォルニア州の数は10です。

2つのテーブルに実際のDDLステートメントを提供できますか? おそらく、クエリを修正するために必要なデータを提供する他の列(city_id?)があります。