2013-07-11 29 views
0
select C.customerId,(C.lastName+', '+C.firstName) as CustomerName, C.companyName, 
D.companyName+' ('+D.lastName+','+D.firstName+')' 
as "Parent CompanyName(Last, First)",S.siteId, S.nickName as siteName, 
dbo.GetSiteTelemetryBoxList(s.siteId) as "DeviceId's", 
dbo.GetSiteTelemetryBoxSKUList(S.siteId,0) as SKU 
from Site S 
INNER JOIN Customer C ON S.customerId = C.customerId 
INNER JOIN Customer D ON D.customerId = C.parentCustomerId 
where S.createDate between DATEADD(DAY, -65, GETUTCDATE()) and GETUTCDATE() 
order by C.customerId, S.siteId 

上述查詢將返回看起來像這樣的價值觀:試圖結果的多行設置成單行結合

CID  CustomerName  companyName   Parent CompanyName(Last, First)     SiteName     DeviceId  SKU 
888296 DeYoung, Scott DeYoung Farms   Mercier Valley Irrigation (Mercier,Ralph)  H E east     200241  NETB12WR 
890980 Rust, Marcus  NULL     Chester Inc. (Young,Scott)      Byroad east     346370  NETB12WR 
890980 Rust, Marcus  NULL     Chester Inc. (Young,Scott)      Byroad west     345431  NETB12WR 
891094 Pirani, Mark  A Pirani Farm   AMX Irrigation (Burroughs,Michael)    hwy 64 south    333721  UNKNOWN 
891094 Pirani, Mark  A Pirani Farm   AMX Irrigation (Burroughs,Michael)    HWY 64 North    250162  NETB12WR 
891094 Pirani, Mark  A Pirani Farm   AMX Irrigation (Burroughs,Michael)    HWY 64 West     250164  NETB12WR 
891094 Pirani, Mark  A Pirani Farm   AMX Irrigation (Burroughs,Michael)    HWY 64 East     250157  NETB12WR 
891430 Gammil, Bob  Gammil FArms   AMX Irrigation (Burroughs,Michael)    angel      333677  UNKNOWN 
891430 Gammil, Bob  Gammil FArms   AMX Irrigation (Burroughs,Michael)    cemetery     333564  UNKNOWN 

我現在面臨的問題是,如果一個客戶ID /名稱是在重複結果集。 SiteName,deviceId,SKU應連接在一起以表示數據爲一個值。 例如,馬克皮拉尼行看起來像

CID CustomerName ... SiteName            DeviceId's     ... 
891904 Pirani, Mark ... hwy 64 south, HWY 64 North, HWY 64 West, HWY 64 East 333721,250162,250164,250157 ... 
+0

更容易依賴於你的專業知識。更好取決於你的專業知識和任何維護它的人的專業知識。當你從SQLServer中獲取數據時,你的數據是什麼對象? – Kevin

+0

我使用數據表來保存查詢返回的數據。 –

+0

@PramodRoy你應該避免問「使用C#格式化它更好/更容易」。這種問題會導致基於觀點的答案,並不適合Stack Overflow。在codereview.stackexchange.com上可以更好地詢問您的問題的部分內容。 –

回答

-1

我做了一些挖掘和發現來實現它的一些方法。基本上,這個簡單的解決方案是使用mysql的group_concat函數。這些鏈接討論如何爲SQL Server實現group_concat。您可以根據您的要求選擇一個。

  1. Simulating group_concat MySQL function in Microsoft SQL Server 2005? - 該主題討論了幾種實現方法。
  2. Flatten association table to multi-value column? - 此線程討論它的CLR實行。
  3. http://groupconcat.codeplex.com/ - 這只是適合我。正是我在找什麼。該項目基本創建了四個集合函數,這些集合函數共同提供與MySQL GROUP_CONCAT函數類似的功能。
0

您可以將行轉換的是這樣的行轉換爲一個連接字符串:

select 
    distinct 
stuff((
    select ',' + u.username 
    from users u 
    where u.username = username 
    order by u.username 
    for xml path('') 
),1,1,'') as userlist 
from users 
group by username 
0

我認爲這更多的是一種SQL的查詢問題比C#代碼問題,或者更準確,我相信它更有效地解決在查詢級別而不是代碼級別這個問題。關於我的頭頂,你可以使用SELECT DISTINCTGROUP BY從句。

這裏是另外一個問題,StackOverflow上解決這個問題 - How do I (or can I) SELECT DISTINCT on multiple columns?

+0

對於我來說,問題不在於獲取唯一值,而是在遇到相同的Id時連接兩個不同行的值。 –