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

我现在面临的问题是,如果 customerId/Name 在结果集中重复。SiteName、deviceId、SKU 应该连接起来以将数据表示为一个值。例如,Mark Pirani 行看起来像

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

3 回答 3

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
于 2013-07-11T20:04:19.307 回答
0

我相信这更像是一个SQL查询问题而不是C#代码问题,或者更恰当地说,我认为在查询级别而不是代码级别解决这个问题更有效。在我的脑海中,您可以使用SELECT DISTINCTorGROUP BY子句。

这是解决此问题的另一个 StackOverflow 问题 -我如何(或我可以)在多个列上选择 DISTINCT?

于 2013-07-11T20:05:02.280 回答
-1

我做了一些挖掘并找到了一些实现它的方法。基本上,解决这个问题的简单方法是使用 mysql 的 group_concat 函数。这些链接讨论了如何为 SQL 服务器实现 group_concat。您可以根据自己的要求选择一种。

  1. 在 Microsoft SQL Server 2005 中模拟 group_concat MySQL 函数? -- 这个线程讨论了一些实现它的方法。
  2. 将关联表展平为多值列? -- 这个线程讨论了它的 CLR 实现。
  3. http://groupconcat.codeplex.com/——这对我来说是完美的。正是我想要的。该项目基本上创建了四个聚合函数,它们共同提供与 MySQL GROUP_CONCAT 函数类似的功能。
于 2013-07-12T15:19:10.450 回答