2016-12-15 9 views
1

この質問の複数の味が尋ねられましたが、私は何をしようとしているのかを見つけることができませんでした。私は国家と市の明確な組み合わせをカウントし、テーブルの新しい列として返したいSQL内の複数の列にまたがる別々の組み合わせの数をカウント

State City   Job 
CA  LOS ANGELES DEVELOPER 
CA  SAN FRANCISCO DESIGNER 
CA  LOS ANGELES DESIGNER 
NY  NEW YORK  DEVELOPER 

:これは私の元のテーブル(SQLServerの)です。だから、最終生成物は、次のようになります。

State City   Job   # of Unique 
CA  LOS ANGELES DEVELOPER 3 
CA  SAN FRANCISCO DESIGNER 3 
CA  LOS ANGELES DESIGNER 3 
NY  NEW YORK  DEVELOPER 3 

私は同じテーブルで内部結合をして、カウントを使用してみましたが、それは正しい結果を返していません。どんな助けでも大歓迎です。

+0

あなたの出力が入力と一致していないはずです

SELECT a.State ,a.City ,a.Job ,b.CountField FROM #TestData a CROSS JOIN (SELECT COUNT(DISTINCT State + City) CountField FROM #TestData WHERE State = 'CA' ) b 

。 CA - ロサンゼルスでは2、他の2列では1を期待していますか? –

答えて

3

このクエリを試してみてください。コメント欄に質問を1として

テストデータ

CREATE TABLE #TestData (State nvarchar(2), City nvarchar(20), Job nvarchar(20)) 
INSERT INTO #TestData 
VALUES 
('CA','LOS ANGELES','DEVELOPER') 
,('CA','SAN FRANCISCO','DESIGNER') 
,('CA','LOS ANGELES','DESIGNER') 
,('NY','NEW YORK','DEVELOPER') 

クエリ

SELECT 
    a.State 
    ,a.City 
    ,a.Job 
    ,b.CountField 
FROM #TestData a 
CROSS JOIN (SELECT 
      COUNT(DISTINCT State + City) CountField 
      FROM #TestData 
      ) b 

出力(順不同声明による順不同ため)

State City   Job   CountField 
CA  LOS ANGELES  DEVELOPER 3 
CA  LOS ANGELES  DESIGNER 3 
CA  SAN FRANCISCO DESIGNER 3 
NY  NEW YORK  DEVELOPER 3 

、あなたはこれを行うことができますカウント内のCAのみのフィルタリング。出力

State City   Job   CountField 
CA  LOS ANGELES  DEVELOPER 2 
CA  LOS ANGELES  DESIGNER 2 
CA  SAN FRANCISCO DESIGNER 2 
NY  NEW YORK  DEVELOPER 2 
+0

ありがとうございました。しかし、CountFieldの下では、すべての行が繰り返される州と都市のユニークな組み合わせの合計数を示したいと考えています。だから私の例では、ユニークな組み合わせはCA - LA/CA - SANFRAN/NY - NYであるので、カウント列はすべての行で3を返します。それは理にかなっていますか? – rafacardosoc

+0

@rafacardosoc aah、gotcha。その1つを試してください –

+0

ありがとうリッチ、私はあなたの応答を正確にマークしましたが、最後のキャビアを依頼しました。このクエリは、州または都市をフィルタリングすることができ、カウントは更新されますか?だから、もし私がwhere state = CAを実行すると、すべての行を3つ出力するテーブルの代わりに、NYを除いて2が表示されます。 – rafacardosoc

関連する問題