2017-02-16 61 views
0

我與客戶的詳細信息和表一表「客戶」「呼叫」在那裏我存儲每個phonecallSQL Server 2012的外記錄合併適用相關的表

的結果,當我需要得到客戶列表我有打電話給我用這個查詢

​​

,我去年3個回答讓所有的客戶名單的城市在一起。

但這返回多達3條記錄爲每一個客戶,而我就只有一個 和總結CalledOn的值3點的值,並回答到相同的記錄

更清晰: 現在:

+-----------+---------------+-------------+------------------+ 
|Customer 1 | 555-333 333 | 02-10-17 | Call Tomorrow | 
+-----------+---------------+-------------+------------------+ 
|Customer 2 | 555-444 333 | 02-10-17 | Call Tomorrow | 
+-----------+---------------+-------------+------------------+ 
|Customer 1 | 555-333 333 | 02-11-17 | Call Tomorrow | 
+-----------+---------------+-------------+------------------+ 
|Customer 1 | 555-333 333 | 02-12-17 | Stop Calling  | 
+-----------+---------------+-------------+------------------+ 

預計

+-----------+---------------+--------------------------------+ 
|Customer 1 | 555-333 333 | 02-12-17 : Call Stop Calling | 
|   |    | 02-11-17 : Call Tomorrow  | 
|   |    | 02-10-17 : Call Tomorrow  | 
+-----------+---------------+-------------+------------------+ 
|Customer 2 | 555-444 333 | 02-10-17 | Call Tomorrow | 
+-----------+---------------+-------------+------------------+ 

目前我正在與服務器端邏輯achieveing這一點,但我敢肯定它命名爲c用TSQL更容易和更好的方式

可以提示方向嗎?

感謝

回答

1

對於SQL-Server 2012的

SELECT TOP (50) S.ID, S.URL, S.Phone, S.Email, 
      STUFF((SELECT CHAR(10) + concat (I.CalledOn, ' ', I.Answer) 
        FROM dbo.Calls AS I 
        WHERE S.URL = I.URL 
        ORDER BY I.CalledOn DESC 
        FOR XML PATH('') 
       ), 1, 1, '') AS CallAnswer 
FROM dbo.Customers AS S 
WHERE URL is not null and City like 'Berl%' 
ORDER BY S.ID 

vNext:

SELECT TOP (50) S.ID, S.URL, S.Phone, S.Email, 
      (SELECT TOP (3) STRING_AGG(CONCAT(I.CalledOn, ' ', I.Answer), CHAR(13)) 
      FROM dbo.Calls AS I 
      WHERE S.URL = I.URL 
      ORDER BY I.CalledOn DESC 
      ) AS CallAnswer 
FROM dbo.Customers AS S 
WHERE URL is not null and City like 'Berl%' 
ORDER BY S.ID 

這裏檢查它:http://rextester.com/HSIEL20631

+0

yessss! 不幸的是不得不使用2012年版本..但沒關係 非常感謝! – Joe