【问题标题】:Get specific columns from xml path从 xml 路径获取特定列
【发布时间】:2015-08-21 09:17:29
【问题描述】:

我在这里有这个查询:

SELECT      
    T.AKSIONERET, 
    sd.Identification_No, sd.Date_Of_Incorp, 
    sd.Ownership_Desc, sd.Ownership_Code, 
    sd.Subject_Name_Code, sd.Subject_Name, 
    sd.Subject_Type_Code, 
    LEFT(sd.Object_Desc, 3999) AS Object_Desc, 
    sd.Subject_Status_Name, sd.Subject_Name, 
    nr2.NACE_Code, nr2.NACE_PARENT, nr2.Description, 
    sd.Subject_Type_Name, sd.Subject_Status_Name, 
    sd.Subject_Type_Name, f.Place_Of_Registration, sd.Object_Desc
FROM            
    NRC_Subject_DEF AS sd 
LEFT JOIN 
    NRC_Nace_REV2 AS nr2 ON nr2.Subject_DEF_Code = sd.Subject_DEF_Code 
LEFT JOIN 
    NRC_ForeignCompany AS f ON sd.ForeignCompany_Code = f.ForeignCompany_Code             
LEFT JOIN 
    (SELECT 
         SDP.Subject_DEF_Code,
         (SELECT 
              SDP1.Subject_DEF_Code, P.First_Name + ' ' + P.Last_Name + '-' + P.Citizenship_Desc AS FullAksionerCitizenship
          FROM 
              NRC_PeopleAddress P 
          INNER JOIN 
              NRC_SubjectDefPeople SDP1 ON SDP1.People_Code = P.People_Code
          WHERE 
              SDP1.Subject_DEF_Code = SDP.Subject_DEF_Code                         
          GROUP BY 
              SDP1.Subject_DEF_Code,  P.First_Name + ' ' + P.Last_Name + '-' + P.Citizenship_Desc 
          FOR XML PATH('')) AS AKSIONERET
      FROM 
          NRC_SubjectDefPeople SDP 
      WHERE 
          SDP.Groyp_Type IN (1,2)           
      GROUP BY 
          SDP.Subject_DEF_Code) AS T ON T.Subject_DEF_Code = SD.SUBJECT_DEF_CODE

我需要检索我从 for xml 路径获得的 FullAksionerCitizenship,而不是 T.AKSIONERET

我知道我必须做一些其他的事情 SELECT 但我不断收到错误、语法错误。

有人可以帮忙吗?

提前致谢

【问题讨论】:

  • 您可以复制包含此列的最后一个 LEFT JOIN。然后你带走所有其他信息。因此,您将在您的 XML 构造中获得该列一次,并再次作为独立列获得此列
  • @Shnugo 你能粘贴代码我应该怎么做?
  • 这样做了...请投票/标记为有帮助(如果有帮助:-))

标签: sql sql-server tsql for-xml-path


【解决方案1】:

我很确定,可能会有更好的设计,但我无法针对测试数据运行它,但这可以工作:

SELECT      
    T.AKSIONERET, 
    T2.FullAksionerCitizenship,
    sd.Identification_No, sd.Date_Of_Incorp, 
    sd.Ownership_Desc, sd.Ownership_Code, 
    sd.Subject_Name_Code, sd.Subject_Name, 
    sd.Subject_Type_Code, 
    LEFT(sd.Object_Desc, 3999) AS Object_Desc, 
    sd.Subject_Status_Name, sd.Subject_Name, 
    nr2.NACE_Code, nr2.NACE_PARENT, nr2.Description, 
    sd.Subject_Type_Name, sd.Subject_Status_Name, 
    sd.Subject_Type_Name, f.Place_Of_Registration, sd.Object_Desc
FROM            
    NRC_Subject_DEF AS sd 
LEFT JOIN 
    NRC_Nace_REV2 AS nr2 ON nr2.Subject_DEF_Code = sd.Subject_DEF_Code 
LEFT JOIN 
    NRC_ForeignCompany AS f ON sd.ForeignCompany_Code = f.ForeignCompany_Code             
LEFT JOIN 
    (SELECT 
         SDP.Subject_DEF_Code,
         (SELECT 
              SDP1.Subject_DEF_Code, P.First_Name + ' ' + P.Last_Name + '-' + P.Citizenship_Desc AS FullAksionerCitizenship
          FROM 
              NRC_PeopleAddress P 
          INNER JOIN 
              NRC_SubjectDefPeople SDP1 ON SDP1.People_Code = P.People_Code
          WHERE 
              SDP1.Subject_DEF_Code = SDP.Subject_DEF_Code                         
          GROUP BY 
              SDP1.Subject_DEF_Code,  P.First_Name + ' ' + P.Last_Name + '-' + P.Citizenship_Desc 
          FOR XML PATH('')) AS AKSIONERET
      FROM 
          NRC_SubjectDefPeople SDP 
      WHERE 
          SDP.Groyp_Type IN (1,2)           
      GROUP BY 
          SDP.Subject_DEF_Code) AS T ON T.Subject_DEF_Code = SD.SUBJECT_DEF_CODE
--here starts the new block (difficult for me without knowing your db...)
LEFT JOIN 
    (SELECT 
         (SELECT 
              SDP1.Subject_DEF_Code, P.First_Name + ' ' + P.Last_Name + '-' + P.Citizenship_Desc AS FullAksionerCitizenship
          FROM 
              NRC_PeopleAddress P 
          INNER JOIN 
              NRC_SubjectDefPeople SDP1 ON SDP1.People_Code = P.People_Code
          WHERE 
              SDP1.Subject_DEF_Code = SDP.Subject_DEF_Code                         
          GROUP BY 
              SDP1.Subject_DEF_Code,  P.First_Name + ' ' + P.Last_Name + '-' + P.Citizenship_Desc 
          ) AS FullAksionerCitizenship
      FROM 
          NRC_SubjectDefPeople SDP 
      WHERE 
          SDP.Groyp_Type IN (1,2)           
      GROUP BY 
          SDP.Subject_DEF_Code) AS T2 ON T2.Subject_DEF_Code = SD.SUBJECT_DEF_CODE

【讨论】:

  • 抱歉,T2.FullAksionerCitizenship 后面忘记了逗号
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多