2011-03-09 17 views
1

私はCorporateTreeと呼ばれるテーブルと生産を持っていると、テーブルのようなデータを持っている:T-SQLクエリ問題

表を:CorporateTree

DivisionName  RegionName   CommonName   BU 
Central   Region 1    Raintree   101 
Central   Region 1    Glenwood   102 
East    Region 2   Balsa    201 
East    Region2   Warren    202 

表:生産

ProdID  BU ResidentName ResidentID  Room 
1   101 Smith, Jeff 234859   1002-A 
2   202 Mill, Steve 125467   2002-B 
3   101 Sisk, Paul 4383943   1009-C 
4   101 Sims, Gary 384393   1010-A 
5   202 Mason, Sam 32902   1012-A 

私が探しています次のような出力を得る:

Division  Region Facility Business Unit ResidentCount Status 
Central  Region 1 Glenwood 102     0   Flag 
Central  Region 1 Raintree 101     3  
East   Region 2 Balsa  201     0   Flag 
East   Region 2 Warren  202     2  

住民の数がゼロ(0)が出力された場合は、Status

で「旗」の値は、私はこのクエリを試してみました:

SELECT ct.DivisionName,ct.RegionName,ct.CommonName AS Facility,ct.BU AS [Business Unit], 
(SELECT ROW_NUMBER() OVER (PARTITION BY p.BU ORDER BY p.BU DESC)) AS ResidentCount FROM 
CorporateTree ct INNER JOIN Production p ON 
p.Bu = ct.BU 

しかし、それは動作していないようですか?誰にでも私を助けることができますか?

+3

「それは動作していないようです」とは、非常に良い問題の説明ではありません。何がうまくいきませんか?起こってはいけないことは何ですか? – Oded

答えて

1

LEFT JOINを使用して、Productionテーブルに行がないビジネスユニットを考慮する必要があります。

SELECT ct.DivisionName, ct.RegionName, ct.CommonName AS Facility, ct.BU AS [Business Unit], 
     COUNT(p.BU) as ResidentCount, 
     CASE WHEN COUNT(p.BU) = 0 THEN 'Flag' ELSE '' END AS Status 
    FROM CorporateTree ct 
     LEFT JOIN Production p 
      ON p.BU = ct.BU 
    GROUP BY ct.DivisionName, ct.RegionName, ct.CommonName, ct.BU 
+0

ありがとうございました。これは私が探しているものです。あなたの答えはいつも分かりやすく、シンプルです。 –

+0

@Sam:喜んで賛辞をいただきありがとうございます。 –