2016-01-04 167 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

不幸的是,没有去。 –