我需要查询表以获取DELIVERYCUSTOMER
而没有重复的名称
在一张桌子里。
例如,请考虑下表和图片(另一个细节不同):
https://gist.github.com/danburzo/9254630
我尝试这样的查询
;WITH Cutomers as (
select DELIVERYCUSTOMER
from delivery_details
group by DELIVERYCUSTOMER )
select
m.DELIVERYADDRESS1,
m.DELIVERYPHONE,
m.contact_person,
m.contact_address,
m.DELIVERYCUSTOMER, m.LATITUDE, m.LONGITUDE
from delivery_details as m
where DELIVERYCUSTOMER LIKE 'Sor%'
join Cutomers as c on c.DELIVERYCUSTOMER = m.DELIVERYCUSTOMER
结果仍显示重复名称
我只需要搜索Bu
时,它就会显示客户起始名称的列表是' Bu'我可以得到另一个细节,如地址,电话,纬度,经度
我在我的sql中运行,数据将显示为
SELECT DELIVERYCUSTOMER, DELIVERYADDRESS1, DELIVERYPHONE, contact_person, contact_address, LATITUDE, LONGITUDE
FROM delivery_details WHERE DELIVERYCUSTOMER LIKE 'Bu%' GROUP BY DELIVERYCUSTOMER
我得到这样的数据
此表中的列超过40+ 我用它来获取
编辑 ::我使用此查询搜索DELIVERYCUTOMER以获取此表中的名称和其他详细信息,因此id,delivery_type,delivery_order等不同
sql server的版本是2012
答案 0 :(得分:1)
您可以尝试使用PARTITION BY
进行分组,ROW_NUMBER
按照预期选择一条记录。
此逻辑非常有用,因为LATITUDE
和LONGITUDE
对同一客户的值不同。
;WITH Customers as (
select
DELIVERYCUSTOMER,
DELIVERYADDRESS1,
DELIVERYPHONE,
contact_person,
contact_address,
DELIVERYCUSTOMER,
LATITUDE,
LONGITUDE,
ROW_NUMBER() OVER (PARTITION BY DELIVERYCUSTOMER) AS RowNumber
from delivery_details)
select
*
from Customers Where RowNumber = 1 and DELIVERYCUSTOMER LIKE 'Sor%'
答案 1 :(得分:1)
您的表格未正常化。例如,找到另一个纬度和经度的相同地址是什么意思?在数据库中甚至不可能实现这一点。因此,您可能需要为地址,电话和联系人分别使用表格。
无论如何,根据给出的表格,您似乎只想看到每个客户的一个结果行,而不关心哪个地址,电话和联系人。
然后这就足够了:
select
deliverycustomer,
min(deliveryaddress1),
min(deliveryphone),
min(contact_person),
min(contact_address)
from delivery_details
group by deliverycustomer
order by deliverycustomer;
如果您希望手机属于该地址,甚至可能显示纬度和逻辑,那么您不会聚合行,而是选择行。为此,您需要使用ROW_NUMBER
对每位客户的记录进行排名。
select
deliverycustomer,
deliveryaddress1,
deliveryphone,
contact_person,
contact_address,
latitude,
longitude
from
(
select
dd.*,
row_number() over (partition by deliverycustomer order by contact_person) as rn
from delivery_details dd
) ranked
where rn = 1
order by deliverycustomer;
答案 2 :(得分:0)
尝试以下查询
select DISTINCT
DELIVERYADDRESS1,
DELIVERYPHONE,
contact_person,
contact_address,
DELIVERYCUSTOMER,
LATITUDE,
LONGITUDE
from delivery_details
如果所有列中的值相同,那么您将只获得1条记录。