2015-04-27 54 views
1

希望你能幫助...串連值和綁定到數據表

我有兩個SQL表,一個有用戶和其他有我需要組合成C#數據表用戶的位置。

加入它們的基本查詢不是問題,問題是用戶可能會多次出現在位置表中。在這種情況下,我需要將每個位置都傳遞給一行,而不是多次將用戶列入多個位置。

這是一個ADO.NET鄰近搜索的一部分,所以當前查詢站作爲...

   DECLARE @lat float 
       DECLARE @lon float 
       SET @lat = @varLat 
       SET @lon = @varLon 
       DECLARE @point geography = geography::Point(@lat, @lon, 4326); 
       DECLARE @distance float 
       SET @distance = @varDistance 
       SELECT t1.locationId, t1.city, t2.[firstName]+' '+[lastName] as name 
       FROM _Locations t1 INNER JOIN _Users t2 ON t2.userId = t1.userId 
       WHERE @point.STDistance(centerPoint) <= @distance 

我覺得自己像LINQ可以幫助,但它不是我以前用過。

+0

哪個DBMS? (非ANSI SQL需要在這裏...) – jarlh

+0

http://stackoverflow.com/questions/6170419/what-is-the-equivalent-of-string-join-on-tsql# –

+0

謝謝蒂姆,但如果我已經理解它是正確的,只有當我指定Id來連接值時纔有效。我需要它在id被重複時做。 –

回答

2

真的沒有足夠的信息給你正確的答案。它可以在sql或代碼中完成。這是T-SQL的方式。

SELECT u.ID, u.Name, 
stuff(
(select ', ' + ul.ID from UserLocations where ul.UserID = u.ID for xml path('')), 
1, 2, null) locs 
    FROM Users u 

UPD:

SELECT t2.[firstName]+' '+[lastName] as name, 
     STUFF(
      (SELECT t1.locationId, t1.city FROM _Locations t1 
       WHERE t1.userId = t2.userId 
       AND @point.STDistance(centerPoint) <= @distance FOR XML PATH('')), 
      1, 2, NULL) locs 
FROM _Users t2 
+0

感謝Eldar,很高興提供更多信息,從未發佈過問題,所以不確定您需要什麼。 –

+0

你用什麼來處理你的數據庫:ADO.NET,LINQtoSQL,EF或其他?你能否提供這段代碼,以便我可以在「代碼」解決方案中建議你。 – Eldar

+0

我編輯了原始問題現在包括它。它是ADO.NET鄰近搜索的一部分。 –

0

最終工作查詢...

SELECT t2.[firstName]+' '+[lastName] as name, 
     STUFF(
       (
        SELECT ', ' + t1.city FROM _Locations t1 
        WHERE t1.userId = t2.userId 
        AND @point.STDistance(centerPoint) <= @distance FOR XML PATH(''), type 
       ).value('.', 'varchar(max)'), 1, 1, '' 
      ) 
      FROM _Users t2