2010-07-11 129 views
0

我想查詢一個表,其中包含直xml數據的列。在查詢中,我正在查詢包含直接數據的列(int,vchar等),但我也在查詢xml列。在xml列中,我想要在xml中獲取一個值,如果它不存在,則返回null。我有以下查詢幾乎可以工作,但返回重複。需要幫忙!SQL查詢/ Xml

我有我的根xml CodeFiveReport然後在它的屬性,並在該屬性中有一個序列號。我試圖抓住序列號,如果它存在並顯示它。

select Distinct rs.Id 
     , rs.CaseNumber 
     , rs.StartDate 
     , rs.[Status] 
     , rs.PatrolDistrict 
     , rs.PrimaryUnit 
     , rs.Location 
     , rs.ReportType 
     , rs.IncidentType 
     , rs.UserId 
     , rs.UnitId 
     , rs.UnitCode 
     , rs.IsLocked 
     , rs.LockedBy 
     , rs.AgencyId 
     , rl.ReportName 
     , rl.ParentId 
     , TempTable.Party.value('(SerialNumber/text())[1]', 'varchar(50)') as SerialNumber 
    from dbo.vw_ReportSummary rs OUTER APPLY Report.nodes('/CodeFiveReport/Properties/Property') AS TempTable(Party) 
    left outer join dbo.ReportLookup rl on rs.Id = rl.Id 
    where rs.[Status] = 'Approved' 
    order by rs.Id 
+1

如果DISTINCT返回重複項,那些重複項並不重複 - 請檢查您的數據! – 2010-07-11 20:22:54

+0

每個結果返回的序列號是不同的......我需要知道的是,如果特定記錄的xml包含任何序列號,而不是全部序列號。這是我無法想象如何去做的 – mint 2010-07-11 22:04:44

回答

1

好,我是能夠解決的問題

我改變Report.nodes('/CodeFiveReport/Properties/Property')Report.nodes('/CodeFiveReport/Properties')

反過來我也改變了我的不是Temptable查詢:TempTable.Party.value('(Property/SerialNumber/text())[1]', 'varchar(50)') as SerialNumber和似乎解決了重複。

感謝您的幫助。

0

很難說如果不知道您的確切數據庫模式。假設這是T-SQL:查看CTE(公用表表達式)並分兩步拆分語句。這使得這些陳述通常簡單得多,而且通常效率更高。