2013-01-08 1 views
0

전자 메일을 통해 결과를 보내도록 쿼리를 설정하고 결과 서식이 잘못 지정됩니다.테이블 형식으로 외부 조인 결과를 사용하는 SQL 서버

테이블 1에서 특정 필드가 null 인 두 테이블에서 값을 선택하고 테이블 2에서 테이블 1 id = 테이블 2 id와 관련된 필드를 추가하려고합니다. 그러나 테이블 2에 없지만 특정 필드가 null 인 테이블 1의 필드도 포함하십시오.

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'; 

그러나 다음과 같이 나타납니다 :

NEW CLIENT PURCHASES 
CUSTkEY CLIENT NAME NEW PURCHASES SOLD DATE  ORDERED DATE PRODUCT ID 
9189ad PHOEBE  LDS    20130107T12:15:00 NULL   BGD01 
8765ad MONICA  PANTS   20130107T12:15:00 NULL   BGD01 
3421ad JOEY   BAG    20130107T12:15:00 NULL   BGD01 
2354ad RACHEL  HAT    20130107T12:15:00 NULL   BGD01 
7653ef SHOES  20121213T06:15:00          hfd00  

당신은 마지막 행은 클라이언트가 클라이언트 테이블이 존재하지 않는 테이블 1의 행 따라서 행 될 일이 볼 수 있듯이 다음과 같아야합니다

CUSTkEY CLIENT NAME NEW PURCHASES SOLD DATE  ORDERED DATE PRODUCT ID 

    7653ef     SHOES  20121213T06:15:00 NULL    hfd00 
+0

생성 된 HTML의 모양은 무엇입니까? –

+0

'FOR XML PATH ('tr'), ELEMENTS XSINIL'과 같은 쿼리에서'XSINIL'을 사용해보십시오. 어쩌면 빈 값에 대한 자리 표시자를 유지할 수있게됩니다 –

+0

xsinil이 작동했습니다 ... 감사합니다. – vbNewbie

답변

1

를 빈 태그를 포함하려면 이름이 같은 여러 열이있을 때, 당신은 다음과 같이 자신의 XML 생성기로 각 열을 포장해야합니다 :

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 
+0

'FROM (VALUES (NULL, NULL, 1)) x (n1, n2, n3)'줄부터 이해하지 못합니다. PRODUCTDATA AS LEFT OUTER JOIN CLIENT_TABLE로 B A.CUSTkey = B.CUSTkey로 A.CUSTKEY, B.CUSTPROJ, 에 의해 GROUP이 NULL 인 경우 A.ITEMS, A.SOLDDATE, A.OBJID, PATH ('tr'), 요소) NVARCHAR (MAX)) – vbNewbie

+0

응답 해 주셔서 감사하지만 XSINIL이 작동했습니다. – vbNewbie