2016-01-04 131 views
1

我是一個SQL新手,但需要更新此查詢包括以下字段「NULL」結果:包括空在MS SQL查詢結果

DrCity 
DrST 
PhoneOffice 
SmnrDate 
SmnrID 

我需要什麼,以獲得做「 NULL'結果爲這些字段。現在,查詢排除了至少SmnrDate和SmnrID的NULL結果。

謝謝。

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[Report_ActiveClients_ByConsultant] 
    @EmpID varchar(10) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    SELECT 
      EmpID 
     , LastName 
     , FirstName 
     , DrCity 
     , DrST 
     , PhoneOffice 
     , [Status] 
     , Seminar.SmnrName 
     , CONVERT(varchar(10), Smnr.SmnrDate, 101) AS SeminarDate 
    FROM     (SELECT EmpID 
           , Contact.ContactID 
           , LastName 
           , FirstName 
           , DrCity 
           , DrST 
           , PhoneOffice 
           , [Status] 
           , MAX(SmnrDate) AS SmnrDate 
           FROM Consultant INNER JOIN Contact ON Consultant.EmpID = Contact.Consultant1 
               INNER JOIN ContactNameLink ON Contact.ContactID = ContactNameLink.lnkContactID 
               INNER JOIN ContactName ON ContactNameLink.lnkNameID = ContactName.NameID 
               LEFT JOIN SmnrAttnDetail ON Contact.ContactID = SmnrAttnDetail.ContactID 
               LEFT JOIN Seminar ON SmnrAttnDetail.SmnrID = Seminar.SmnrID 
           WHERE ((@EmpID = '' AND Consultant.Active='1') OR Consultant.EmpID = @EmpID) 
             AND Contact.Active='Yes' 
             AND Contact.ContactType='Client' 
             AND (Contact.[Status] = 'ACS' 
             OR Contact.[Status] = 'AC' 
             OR Contact.[Status] = 'BC' 
             OR Contact.[Status] = 'QS' 
             OR Contact.[Status] = 'SAT' 
             OR Contact.[Status] = 'LC' 
             OR Contact.[Status] = 'AS') 
             AND ContactNameLink.[Primary] = 1 

           GROUP BY EmpID, Contact.ContactID, LastName, FirstName, DrCity, DrST, PhoneOffice, [Status]) AS Smnr 
       LEFT JOIN SmnrAttnDetail ON SmnrAttnDetail.ContactID = Smnr.ContactID 
       INNER JOIN Seminar ON SmnrAttnDetail.SmnrID = Seminar.SmnrID AND Seminar.SmnrDate = Smnr.SmnrDate 

    GROUP BY EmpID, Smnr.ContactID, LastName, FirstName, DrCity, DrST, PhoneOffice, [Status], Seminar.SmnrName, Smnr.SmnrDate 
    ORDER BY EmpID, LastName 

END 

最終代碼:

SELECT  dbo.StatusCode.Code, dbo.Contact.ContactType, dbo.Contact.Active, dbo.Contact.Status, dbo.ContactName.Title, dbo.ContactName.FirstName, 
         dbo.ContactName.LastName, dbo.Contact.Addr1, dbo.Contact.City AS DrCity, dbo.Contact.ST AS DrST, dbo.Contact.PhoneClinic AS PhoneOffice, dbo.Contact.DateJoined, 
         dbo.Contact.Consultant1 AS EmpID, ISNULL(CONVERT(varchar(10), dbo.qyLastSmnrActiveReport.LastSmnr, 101),'None') AS SeminarDate, dbo.qyLastSmnrActiveReport.SmnrName 
FROM   dbo.Contact INNER JOIN 
         dbo.StatusCode ON dbo.Contact.Status = dbo.StatusCode.Code INNER JOIN 
         dbo.ContactNameLink ON dbo.Contact.ContactID = dbo.ContactNameLink.lnkContactID INNER JOIN 
         dbo.Consultant ON Contact.Consultant1 = Consultant.EmpID INNER JOIN 
         dbo.ContactName ON dbo.ContactNameLink.lnkNameID = dbo.ContactName.NameID LEFT OUTER JOIN 
         dbo.qyLastSmnrActiveReport ON dbo.Contact.ContactID = dbo.qyLastSmnrActiveReport.ContactID 
WHERE  (dbo.Contact.Active = N'Yes') AND (dbo.Contact.Status IN (N'AC', N'QS', N'BC', N'LS', N'ACS', N'SAT', N'ACS', N'AS')) AND (dbo.Contact.ContactType = N'CLIENT') AND 
         (dbo.ContactNameLink.[Primary] = 1) AND ((@EmpID = '' AND dbo.Consultant.Active='1') OR Consultant1 = @EmpID) 
         ORDER BY EmpID, LastName, FirstName 
+0

嘗試改變外部查詢的'INNER JOIN研討會...'到外部聯接:' LEFT JOIN研討會...' – Parfait

+0

而不是編輯T.他對答案提出質疑,在StackOverflow上添加解決方案作爲答案是一種更好的做法。請參閱[我可以回答我自己的問題嗎?](http://stackoverflow.com/help/self-answer)。你現在應該有足夠的代表去做。 –

回答

0

更換

INNER JOIN Seminar 

LEFT JOIN Seminar 
+0

這會導致調用SQL查詢的應用程序崩潰,並出現以下錯誤:「表'Report_ActiveClients_ByConsultant'中'SeminarDate'列的值爲DBNull。」 (所以我看到SQL是正確的,但現在這又產生了另一個問題。) –

+0

然後它可能是'CONVERT'不喜歡NULL。嘗試用'Smnr.SmnrDate'替換'CONVERT(varchar(10),Smnr.SmnrDate,101)'' – HubertL

+0

不幸的是,沒有去。 –