2014-11-11 3 views
0

하나의보기를 구현하려고하지만 내 지식만으로는 충분하지 않습니다.아마도보기가 불가능합니다. 너무 복잡합니다.

이 내 쿼리 내가보기

DECLARE @CTE Table(DocumentID varchar(50),DocumentNo varchar(50),XMLContent xml); 
DECLARE @TBL table(DocumentID varchar(100),DocumentNo varchar(100),VData varchar(100),Vpublika varchar(100),VVatreshen varchar(100)); 

INSERT INTO @CTE 
SELECT DocumentID,DocumentNo,CAST(REPLACE(CAST(content AS NVARCHAR(MAX)),'utf-8','utf-16') AS XML) AS XMLContent 
FROM MainSQLTable 
WHERE DOCTYPEID = 2; 

INSERT INTO @TBL 
SELECT DocumentID,DocumentNo, 
REPLACE(REPLACE (CONVERT(varchar(100),XMLContent.query('/IDMSDocument/DocumentContent/Attribute[@Name="Публикa"]/Value/Value')),'</Value>','') ,'<Value>','') as Vpublika, 
REPLACE(REPLACE (CONVERT(varchar(100),XMLContent.query('/IDMSDocument/DocumentContent/Attribute[@Name="Дата"]/Value/Date')),'</Date>','') ,'<Date>','') as VData, 
REPLACE(REPLACE (CONVERT(varchar(100),XMLContent.query('/IDMSDocument/DocumentContent/Attribute[@Name="Вътрешен №"]/Value/Value')),'</Value>','') ,'<Value>','') as VVatreshen 
REPLACE(REPLACE (CONVERT(varchar(100),XMLContent.query('/IDMSDocument/DocumentContent/Attribute[@Name="ДатаIn"]/Value/Date')),'</Date>','') ,'<Date>','') as VDataIn, 
FROM @CTE; 

SELECT 
PRI.DocumentNo as DOCUMENTNO, 
PRI.VData as DATA, 
PRI.VVatreshen as VATRESHEN, 
SEK.DocumentNo as DocumentNo2, 
SEK.VDataIn as VData2, 
SEK.VVatreshen as VVatreshen 
from @TBL as PRI LEFT JOIN @TBL as SEK ON (PRI.VData = SEK.VDataIn) 
WHERE (PRI.Vpublika = 'Да') 

답변

2

당신이 대신 테이블의 CTEs을 사용하려했는지 확인하려고한다는부터입니까?

WITH cte AS (
    SELECT DocumentID,DocumentNo,CAST(REPLACE(CAST(content AS NVARCHAR(MAX)),'utf-8','utf-16') AS XML) AS XMLContent 
    FROM MainSQLTable 
    WHERE DOCTYPEID = 2 
), 
tbl AS (
    SELECT DocumentID,DocumentNo, 
     REPLACE(REPLACE (CONVERT(varchar(100),XMLContent.query('/IDMSDocument/DocumentContent/Attribute[@Name="Публикa"]/Value/Value')),'</Value>','') ,'<Value>','') as Vpublika, 
     REPLACE(REPLACE (CONVERT(varchar(100),XMLContent.query('/IDMSDocument/DocumentContent/Attribute[@Name="Дата"]/Value/Date')),'</Date>','') ,'<Date>','') as VData, 
     REPLACE(REPLACE (CONVERT(varchar(100),XMLContent.query('/IDMSDocument/DocumentContent/Attribute[@Name="Вътрешен №"]/Value/Value')),'</Value>','') ,'<Value>','') as VVatreshen, 
     REPLACE(REPLACE (CONVERT(varchar(100),XMLContent.query('/IDMSDocument/DocumentContent/Attribute[@Name="ДатаIn"]/Value/Date')),'</Date>','') ,'<Date>','') as VDataIn 
    FROM cte 
) 
SELECT 
PRI.DocumentNo as DOCUMENTNO, 
PRI.VData as DATA, 
PRI.VVatreshen as VATRESHEN, 
SEK.DocumentNo as DocumentNo2, 
SEK.VDataIn as VData2, 
SEK.VVatreshen as VVatreshen 
from tbl as PRI 
LEFT JOIN tbl as SEK ON (PRI.VData = SEK.VDataIn) 
WHERE (PRI.Vpublika = 'Да') 
+0

시간이 많이 걸렸지 만, 항상 오류가 있기 때문에 잘못 입력 한 것일 수 있습니다. 지금 너와 나는 성공했다! – RCancer

+0

안녕하세요 @RCancer이 질문이나 답변으로 문제가 해결되면 [확인] (http://meta.stackexchange.com/q/5234/179419)을 클릭하여 확인하십시오. 이는 해결책을 찾았으며 응답자와 자신에게 어느 정도의 평판을 제공한다는 것을 더 넓은 커뮤니티에 나타냅니다. 이를 수행 할 의무는 없습니다. – AHiggins

관련 문제