我不知道每次如何返回相关数据。
大家好,我正在制作一个交互式网络地图,在该地图上我将不同的对象显示为地图上的标记,例如车辆或消防栓。我正在从M SQL服务器获取数据。我使用geoserver从sql视图生成JSON,我使用这些json放置标记,并在弹出窗口中填充有关对象的信息。
因此,对于消防栓,我认为关于地址有4列。其中两个是用户在软件中的输入,另外两个是从其他较旧软件中恢复的数据。 像这样 查看:
╔═══════════╦══════════╦═══════╦═══════╗
║ Adress1 ║ adress2 ║ NVOIE ║ TVOIE ║
╠═══════════╬══════════╬═══════╬═══════╣
║ ║next to...║ Cesar ║ plaza ║
║Grand road ║in front ║ Gand ║ road ║
║Winter road║ ║ ║ ║
║Beer road ║close to ║ ║ ║
║ farm X ║ ║ ║ ║
║ behind... ║ ║ Wine ║ road ║
║ ║ ║ ║ ║
║ ║ ║ ║ ║
╚═══════════╩══════════╩═══════╩═══════╝
SELECT
COALESCE (pe.adresse2, '') AS adresse2,
COALESCE (pe.Adresse1, '') AS Adresse1,
COALESCE(ad.NOM_VOIE,'') as NVOIE,
COALESCE (STUFF((SELECT ',' + tv.libelle
FROM [DDSRV3].[PV].dbo.TYPE_VOIE tv, [DDSRV3].[PV].dbo.ADRESSE ad
WHERE (pe.ADRESSE_REF = ad.CLE AND ad.TYPE_VOIE = tv.CLE) FOR XML PATH('')), 1, 1, ''),'') AS TVOIE
FROM dbo.PE_ENTRETIEN en LEFT JOIN
dbo.PE_POINT_EAU pe ON pe.CLE = en.POINT_EAU LEFT JOIN
dbo.ADRESSE ad ON pe.ADRESSE_REF = ad.CLE LEFT JOIN
dbo.TYPE_VOIE tv ON ad.TYPE_VOIE = tv.CLE
这是我用来生成视图的查询的一部分。
Adresse1和Adresse2(观察字段)是用户输入Nvoie是道路名称,Tvoie是道路类型。 这里的问题是我不知道如何返回最相关的数据,因为有4或5种不同的情况。我想检查Adresse1中的数据是否等于NVOIE + TVOIE,如果是,则用''替换Adresse1中的数据。因此,最后我应该具有道路类型,然后是名称,最后是观测值。
预期结果是在弹出窗口中显示时,我想要的地址是:12 Cesar plaza 70000 Vesoul在墓地旁边,所以:地址道路编号+道路名称+道路类型+邮政编码+城市+观察区域。我已经有邮政编码城市和道路号了。我的问题是数据在某一行上加倍,因此如果我显示这种病,有时会出现12个Cesar广场Cesar广场70000 Vesoul。
在这种情况下,最相关的数据是没有doublet的最大数据。
答案 0 :(得分:0)
据我了解,您必须使用CASE语句和一个SubQuery:
SELECT *,
CASE WHEN Adresse1 = NVOIE + TVOIE THEN '' ELSE Adresse1 END AS Adresse1_Amended
FROM (
SELECT
COALESCE (pe.adresse2, '') AS adresse2,
COALESCE (pe.Adresse1, '') AS Adresse1,
COALESCE(ad.NOM_VOIE,'') as NVOIE,
COALESCE (STUFF((SELECT ',' + tv.libelle
FROM [DDSRV3].[PV].dbo.TYPE_VOIE tv, [DDSRV3].[PV].dbo.ADRESSE ad
WHERE (pe.ADRESSE_REF = ad.CLE AND ad.TYPE_VOIE = tv.CLE) FOR XML PATH('')), 1, 1, ''),'') AS TVOIE
FROM [DDSRV3].[PV].dbo.PE_ENTRETIEN en LEFT JOIN
[DDSRV3].[PV].dbo.PE_POINT_EAU pe ON pe.CLE = en.POINT_EAU LEFT JOIN
[DDSRV3].[PV].dbo.ADRESSE ad ON pe.ADRESSE_REF = ad.CLE LEFT JOIN
[DDSRV3].[PV].dbo.TYPE_VOIE tv ON ad.TYPE_VOIE = tv.CLE
) AS T1