我不知道如何一直返回SQL的相关数据

时间:2018-12-28 09:13:40

标签: sql-server

我不知道每次如何返回相关数据。

大家好,我正在制作一个交互式网络地图,在该地图上我将不同的对象显示为地图上的标记,例如车辆或消防栓。我正在从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的最大数据。

1 个答案:

答案 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