2016-06-22 61 views
0

加入當我使用低於2個查詢分開我獲得成功輸出問題全外的SQL Server

查詢#1

DECLARE @ID VARCHAR(1000) 
SET @ID = '' 

SELECT @ID = @ID + CAST(int_ID AS VARCHAR(1000)) 
FROM MATRIX_RELATIONSHIP 

SELECT COUNT(int_ID) [Count], YEAR(dt_5841_OF) [date] 
FROM TRANS_IDENTIFICATIONS 
WHERE smallint_209_ME = 4 
    AND CHARINDEX(CONVERT(VARCHAR, int_ID), ('''' + Replace((@ID),',',''',''') + '''')) > 0 
GROUP BY YEAR(dt_5841_OF); 

輸出:

 Count | year 
      02 2016 

查詢#2

SELECT 
    COUNT(*) [Count1], YEAR(dt_modifiedOn) [date] 
FROM 
    MATRIX_RELATIONSHIP 
GROUP BY 
    YEAR(dt_modifiedOn); 

產量:

 Count | year 
      02 2016 

但是當我使用這兩個查詢形成full outer join類似如下:

SELECT 
    tab1.Count, tab2.Count1, tab1.date 
FROM 
    (DECLARE @ID VARCHAR(1000) 
    SET @ID = '' 

    SELECT @ID = @ID+CAST(int_ID AS VARCHAR(1000)) 
    FROM MATRIX_RELATIONSHIP 

    SELECT COUNT(int_ID) [Count], YEAR(dt_5841_OF) [date] 
    FROM TRANS_IDENTIFICATIONS 
    WHERE smallint_209_ME = 4 
     AND CHARINDEX(convert(varchar,int_ID), ('''' + Replace((@ID),',',''',''') + '''')) > 0 
    GROUP BY YEAR(dt_5841_OF)) tab1 
FULL OUTER JOIN 
    (SELECT COUNT(*) [Count1], YEAR(dt_modifiedOn) [date] 
    FROM MATRIX_RELATIONSHIP 
    GROUP BY YEAR(dt_modifiedOn)) tab2 ON tab1.date = tab2.date; 

我得到這些錯誤:

消息156,級別15,狀態1,2號線
關鍵字'DECLARE'的語法不正確。

Msg 102,Level 15,State 1,Line 4
')'附近的語法不正確。

Msg 102,Level 15,State 1,Line 7
'tab2'附近的語法不正確。

預期結果

Count | Count1 | year 
    02  02  2016 

編輯

我試圖把申報和設置查詢外面太多,但仍然存在的問題仍然存在

DECLARE @ID VARCHAR(1000) SET @ID='' 
SELECT tab1.Count,tab2.Count1,tab1.date from 
(SELECT @ID= @ID+CAST(int_ID AS VARCHAR(1000)) 
from MATRIX_RELATIONSHIP SELECT COUNT(int_ID)[Count],YEAR(dt_5841_OF)[date] FROM TRANS_IDENTIFICATIONS WHERE smallint_209_ME=4 and CHARINDEX(convert(varchar,int_ID), ('''' + Replace((@ID),',',''',''') + '''')) > 
0 GROUP BY YEAR(dt_5841_OF)) tab1 
FULL OUTER JOIN 
(SELECT COUNT(*)[Count1],YEAR(dt_modifiedOn)[date] 
FROM MATRIX_RELATIONSHIP GROUP BY YEAR(dt_modifiedOn)) tab2 
ON tab1.date=tab2.date; 

這將導致另一錯誤集:

Msg 102,Level 15,State 1,Line 3
'='附近的語法不正確。

Msg 102,Level 15,State 1,Line 5
')'附近的語法不正確。

Msg 102,Level 15,State 1,Line 8
'tab2'附近的語法不正確。

回答

1
DECLARE @ID VARCHAR(1000) 
    SET @ID=''; 

    SELECT @ID = @ID + CAST(int_ID AS VARCHAR(1000)) from MATRIX_RELATIONSHIP; 

    SELECT MAX(Count) AS Count, MAX(Count1) AS Count1, date 
    FROM 
    (

     SELECT COUNT(int_ID)[Count], null AS [Count1], YEAR(dt_5841_OF)[date] 
     FROM TRANS_IDENTIFICATIONS 
     WHERE smallint_209_ME = 4 
     and CHARINDEX(convert(varchar,int_ID), ('''' + Replace((@ID),',',''',''') + '''')) > 
     0 GROUP BY YEAR(dt_5841_OF) 
     UNION ALL 
     SELECT NULL AS [Count], COUNT(*)[Count1],YEAR(dt_modifiedOn)[date] 
     FROM MATRIX_RELATIONSHIP 
     GROUP BY YEAR(dt_modifiedOn) 
    )AS temp 
    GROUP BY [date] 
0

您的DECLARE和SET必須在SELECT之外。但它的目的是什麼?

+1

@SiddP同爲'選擇@ ID =' - 它不屬於完全加入。 –

0

從select語句中刪除DECLARE @ID VARCHAR(1000);
SET @ID=''
在你的聲明 上方還聲明變量,而不是寫兩個單獨的選擇語句中使用內部連接上int_id然後執行外連接,將工作

+0

我已經嘗試過您可以看到問題。它導致錯誤 – SiddP

1

這是不是從
一個有效的,所以兩個選擇語句

from 
(DECLARE @ID VARCHAR(1000) 
    SET @ID='' SELECT @ID= @ID+CAST(int_ID AS VARCHAR(1000)) 
      from MATRIX_RELATIONSHIP 

    SELECT COUNT(int_ID)[Count],YEAR(dt_5841_OF)[date] 
    FROM TRANS_IDENTIFICATIONS 
    WHERE smallint_209_ME=4 
    and CHARINDEX(convert(varchar,int_ID), ('''' + Replace((@ID),',',''',''') + '''')) > 0 
    GROUP BY YEAR(dt_5841_OF) 
) 
0
DECLARE

VARCHAR @ID(1000) SET @ID = '' SELECT * FROM ( SELECT @ ID + CAS T(MATRIX_RELATIONSHIP.int_ID爲varchar(1000))AS的count1,COUNT(TRANS_IDENTIFICATIONS.int_ID)AS COUNT2,YEAR(TRANS_IDENTIFICATIONS.dt_5841_OF)AS DATE1 FROM MATRIX_RELATIONSHIP INNER JOIN TRANS_IDENTIFICATIONS ON MATRIX_RELATIONSHIP.int_ID = TRANS_IDENTIFICATIONS.int_ID WHERE(TRANS_IDENTIFICATIONS .smallint_209_ME = 4)AND(CHARINDEX(CONVERT(varchar,TRANS_IDENTIFICATIONS.int_ID),''''+ REPLACE(@ID,',',''',''')+'''')> 0) GROUP BY YEAR(TRANS_IDENTIFICATIONS.dt_5841_OF),MATRIX_RELATIONSHIP.int_ID 工會 ( SELECT '' 作爲COUNT1,COUNT(*)[共2個記錄],YEAR(dt_modifiedOn)[DATE1] FROM MATRIX_RELATIONSHIP GROUP BY YEAR(dt_modifiedOn) ) )作爲TBL

我希望這對你的作品...你讓我知道