Sql server 2008 sql server使用外部联接结果转换为表格式

Sql server 2008 sql server使用外部联接结果转换为表格式,sql-server-2008,html-email,outer-join,Sql Server 2008,Html Email,Outer Join,我正在设置查询以通过电子邮件发送结果,结果格式不正确 我想从两个表中选择值,其中表1中的某个字段为空,并从表2中添加一个相关字段,其中表1 id=表2 id。但也包括表1中可能不在表2中但具有某个字段为空的字段 DECLARE @TITLE NVARCHAR(MAX) DECLARE @BODY NVARCHAR(MAX) SET @TITLE =CAST(( SELECT DISTINCT A.CUSTKEY as 'td','', B.CUSTPROJ as 'td','',

我正在设置查询以通过电子邮件发送结果,结果格式不正确

我想从两个表中选择值,其中表1中的某个字段为空,并从表2中添加一个相关字段,其中表1 id=表2 id。但也包括表1中可能不在表2中但具有某个字段为空的字段

 DECLARE @TITLE NVARCHAR(MAX)
 DECLARE @BODY NVARCHAR(MAX)

 SET @TITLE =CAST(( SELECT DISTINCT A.CUSTKEY as 'td','',
 B.CUSTPROJ as 'td','',   A.ITEMS AS 'td','', A.SOLDDATE as 'td','',
 A.LASTORDEREDDATE as 'td','', A.OBJID as 'td'
 FROM PRODUCTDATA AS A LEFT OUTER JOIN CLIENT_TABLE as B
 on A.CUSTkey = B.CUSTkey 
 WHERE LASTORDEREDDATE IS NULL GROUP BY A.CUSTKEY,B.CUSTPROJ, 
 A.ITEMS, A.SOLDDATE, A.OBJID,A.LASTORDEREDDATE
 FOR XML PATH ('tr'), ELEMENTS) AS NVARCHAR(MAX))

 SET @BODY = '<html><body><H4>NEW CLIENT PURCHASES</H4>
 <table border = 2>
 <tr>
 <th> CUST KEY </th> <th> CLIENT NAME </th> <th> NEW PURCHASES </th>
 <th> SOLD DATE </th> <th> ORDERED DATE </th> <th> PRODUCT ID </th></tr>'

 SET @BODY = @BODY + @TITLE + '</TABLE></BODY></HTML>'

EXEC msdb.dbo.sp_send_dbmail @profile_name='DB Admin',
@body =   @BODY,
@body_format = 'HTML';
如您所见,最后一行恰好是表1中的一行,其中客户端在客户端表2中不存在,因此该行应如下所示:

  CUSTkEY   CLIENT NAME NEW PURCHASES    SOLD DATE       ORDERED DATE    PRODUCT ID 

   7653ef                  SHOES       20121213T06:15:00   NULL             hfd00
SELECT 
 (SELECT (SELECT n1) FOR XML PATH('td'),TYPE),
 (SELECT (SELECT n2) FOR XML PATH('td'),TYPE), 
 (SELECT (SELECT n3) FOR XML PATH('td'),TYPE)
FROM (VALUES(NULL,NULL,1))x(n1,n2,n3)
FOR XML PATH('tr'), ELEMENTS 

要在有多个同名列时包含空标记,必须将每个列包装到其自己的XML生成器中,如下所示:

  CUSTkEY   CLIENT NAME NEW PURCHASES    SOLD DATE       ORDERED DATE    PRODUCT ID 

   7653ef                  SHOES       20121213T06:15:00   NULL             hfd00
SELECT 
 (SELECT (SELECT n1) FOR XML PATH('td'),TYPE),
 (SELECT (SELECT n2) FOR XML PATH('td'),TYPE), 
 (SELECT (SELECT n3) FOR XML PATH('td'),TYPE)
FROM (VALUES(NULL,NULL,1))x(n1,n2,n3)
FOR XML PATH('tr'), ELEMENTS 

生成的HTML是什么样子的?尝试在查询中使用
XSINIL
,如
查询XML路径('tr')、元素XSINIL
。也许它会允许为空值保留占位符xsinil工作了…感谢muchI不理解PRODUCTDATA中的from(VALUES(NULL,NULL,1))x(n1,n2,n3)行作为左外部连接客户机\表作为A.CUSTkey=B.CUSTkey上的B,其中LASTORDEREDDATE为NULL组由A.CUSTkey,B.CUSTPROJ,A.ITEMS,A.SOLDDATE,A.OBJID,XML路径('tr'),元素)的A.LASTORDEREDDATE作为NVARCHAR(MAX))