试图从SQL Server获取具有lat和long的行

时间:2017-12-02 05:40:45

标签: sql sql-server

我有一些数据,我正在尝试选择每个具有良好lat长度的人,而且那些没有lat长度的数据是我的数据:

enter image description here

某些数据的纬度和长度为1和0的原因是因为他们的订单在发货前进入erp系统,我们希望在地图中看到这些订单的半径。所以我们希望事实进入事实表,即使我们可能或可能没有这个客户的纬度或长度。

基本上,如果我有一个像josh Deshazer这样的客户,并且他有两个重复的行,因为他进入系统时没有一个lat而且很长时间他最终得到一个lat而且记录很长我想要只选择好的lat记录然后,如果我有一个像mike davis这样的客户,即使他没有一个好的lat和很长的我仍然想在查询中选择他所有

基本上我会想要josh Deshazer 14.5和12.2以及ken johnson只有-93和45以及mike davis和1和0都在一个查询中。感谢任何人的帮助,请接受任何有关此事的建议。

2 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER FUNCTION

实现此目的
SELECT
       Long,Lat,FirstName,lastName,OrderNumber FROM
    (
        SELECT Long,Lat,FirstName,lastName,OrderNumber,
            ROW_NUMBER() OVER (PARTITION BY Long,Lat ORDER BY Long,Lat  ) rn
        FROM #TMP 
    ) t
    WHERE t.rn = 1
    ORDER BY FirstName,lastName

Check THe Image Shows you Desire Outpt You Are looking for

答案 1 :(得分:0)

试试这个:

(SELECT long, Lat, FirstName, LastName, OrderAmount, OrderNumber    
FROM
your_table
WHERE OrderNumber IN (SELECT OrderNumber FROM your_table GROUP BY OrderNumber HAVING COUNT(*) > 1)
AND (long <> 1 AND Lat <> 0))   --Conditions in this line can be tweaked based on how your definition of bad lat/long works
UNION ALL   
(SELECT long, Lat, FirstName, LastName, OrderAmount, OrderNumber    
FROM
your_table
WHERE OrderNumber IN (SELECT OrderNumber FROM your_table GROUP BY OrderNumber HAVING COUNT(*) = 1));