2013-04-28 25 views
-3

在一天中的很長一段時間裏,我一直在敲擊鍵盤。我需要幫助!在Microsoft SQL查詢中識別組的最佳方式

我有一個可能或可能不屬於組織的客戶列表。這些組織按組織類型分組。我試圖在每個組的Excel中刪除報告。每組組織都有隨機數量的組織分配給他們。在Excel工作表中,我需要在列中列出組中的每個組織,然後將客戶端轉儲到相應列中的Y或N的每一行。

我的源表看起來像這樣:

GROUP ORGID CLIENT 
1  1  5 
1  2  4 
1  1  4 
1  3  5 

Excel工作表應該是這樣的:

ORGNAME1  ORGNAME2  ORGNAME3  CLIENT 
Y   Y   N    4 
Y   N   Y    5 

的Excel報表由C#Windows服務中產生。我可以在執行之前爲每個組建立查詢,或者更喜歡SQL的唯一方式來執行我可以作爲存儲過程運行的查詢,並提供組織組ID。

編輯:如果我忘了提及它......每組將有一個Excel文檔。每個組可能包含2-10個組織,因此它必須是動態的。

有沒有推薦的方法來做到這一點?

回答

1

您可以使用SQL樞見下文

declare @orgscolumns nvarchar(max) 
declare @orgs nvarchar(max) 
declare @query nvarchar(max) 

select @orgscolumns = STUFF((SELECT distinct ',' + QUOTENAME(orgname) 
      FROM orgs 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)'),1,1,'') 

select @orgs = STUFF((SELECT distinct ',case when ' + QUOTENAME(orgname) 
        + ' is null then ''N'' Else ''Y'' END ' + QUOTENAME(orgname) 
      FROM orgs 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)'),1,1,'') 


select @query = 'select client, ' + @orgs + ' from 
       (select t.*, orgname from t inner join orgs o on t.orgid = o.id) v 
       pivot (max(orgid) for orgname in (' + @orgscolumns + ')) p' 

exec(@query) 

SQL DEMO

+0

有趣......這是否意味着你的東西的機構單位以逗號分隔的變量? @orgs =(org1,org2,org3)。我將不得不閱讀關鍵點。從未聽說過它。 – 2013-04-28 02:12:03

+0

是的,在'@ orgscolumns'中,我創建了所有'orgs'的動態列表,'@ orgs'的列有條件將值轉換爲Y,N。您可以通過將'exec(@query)'替換爲'打印(@query)' – 2013-04-28 02:15:48