希望你能帮到...
我有两个 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 可能会有所帮助,但它不是我以前使用过的东西。
真的没有足够的信息给你正确的答案。它可以在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
上级:
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
最终工作查询是...
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