2016-06-22 7 views
0

Wenn ich unter 2 Abfragen verwenden separat I-Ausgang erhalten erfolgreichAusgabe mit voller Outer-Joins in SQL Server

Abfrage # 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); 

Ausgang:

 Count | year 
      02 2016 

Abfrage # 2

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

Ausgabe:

 Count | year 
      02 2016 

Aber wenn ich beiden Abfragen verwenden, um ein full outer join etwas wie unten zu bilden:

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; 

ich diese Fehler:

Msg 156, Ebene 15, Status 1, Zeile 2
Falsche Syntax in der Nähe des Schlüsselwortes 'DECLARE'.

Msg 102, Ebene 15, Status 1, Zeile 4
Falsche Syntax in der Nähe von ')'.

Msg 102, Ebene 15, Status 1, Zeile 7
Falsche Syntax in der Nähe von 'Tab2'.

Erwartetes Ergebnis

Count | Count1 | year 
    02  02  2016 

EDIT

Ich Platzierung haben versucht zu erklären und außerhalb der Abfrage auch, aber immer noch da das Problem weiterhin besteht

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; 

gesetzt, die zu einem anderen führt Fehlergruppe:

Msg 102, Ebene 15, Status 1, Zeile 3
Falsche Syntax in der Nähe von '='.

Msg 102, Ebene 15, Status 1, Zeile 5
Falsche Syntax in der Nähe von ')'.

Msg 102, Ebene 15, Status 1, Zeile 8
Falsche Syntax in der Nähe von 'Tab2'.

Antwort

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

Ihre DECLARE und SET muss außerhalb der SELECT sein. Aber was ist der Zweck?

+1

@SiddP gleich SELECT @ ID = 'Sie wissen lassen - es ist nicht zu voll beitreten gehört. –

0

Entfernen Sie die DECLARE @ID VARCHAR(1000);
SET @ID='' aus der Select-Anweisung.
Auch die Variable an der Spitze Ihrer Aussage und eher zu schreiben zwei separate SELECT-Anweisung innere Verknüpfung auf INT_ID verwenden erklären und Sie dann die äußere Verknüpfung wird es

+0

Ich habe es schon ausprobiert, dass du fragst. Es führt zu einem Fehler – SiddP

1

dies ist kein gültiger von
es zwei ist arbeiten wählen

Aussagen
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 @ID VARCHAR (1000) SET @ID = '' select * from ( SELECT @ ID + CAS T (MATRIX_RELATIONSHIP.int_ID AS VARCHAR (1000)) als COUNT1, COUNT (TRANS_IDENTIFICATIONS.int_ID) AS count2, Jahr (TRANS_IDENTIFICATIONS.dt_5841_OF) AS date1 FROM MATRIX_RELATIONSHIP INNER JOIN TRANS_IDENTIFICATIONS MATRIX_RELATIONSHIP.int_ID ON = TRANS_IDENTIFICATIONS.int_ID WHERE (TRANS_IDENTIFICATIONS .smallint_209_ME = 4) UND (CHARINDEX (CONVERT (varchar, TRANS_IDENTIFICATIONS.int_ID), '' '' + ERSETZEN (@ID, ',', '' ',' '') + '' '')> 0) GROUP BY YEAR (TRANS_IDENTIFICATIONS.dt_5841_OF), MATRIX_RELATIONSHIP.int_ID Union ( SELECT '' als COUNT1, COUNT (*) [Count2], Jahr (dt_modifiedOn) [date1] FROM MATRIX_RELATIONSHIP GROUP BY YEAR (dt_modifiedOn) ) ) Als TBL

hoffe, dass ich dies für Sie ... mich