2016-11-08 1 views
1

Ich möchte die Anzahl der Zeilen aus einer Tabelle basierend auf einem bestimmten Kriterium für jede Spalte in meiner Ergebnistabelle abrufen. Die Tabelle selbst ist eine temporäre Tabelle.SQL-Abfrage: jeder Spaltenwert ist eine Aggregation basierend auf einem anderen Filter für eine temporäre Tabelle

Die Abfrage unten ist das, was ich erreichen will, aber ich weiß nicht, was die Syntax, um es zu bekommen ist:

WITH table1 as(a huge inner joins between different tables) 

SELECT * 
FROM (
    (
     SELECT COUNT(*) 
     FROM table1 
     WHERE 
      column1 = 'value1' AND column2 > 0 
    ) AS Count1, 
    (
     SELECT COUNT(*) 
     FROM table1 
     WHERE 
      column1 = 'value1' AND column2 = 0 
    )AS Count2, 
    (
     SELECT COUNT(*) 
     FROM table1 
     WHERE 
      column1 = 'value2' AND column2 > 0 
    )AS Count3, 
    (
     SELECT COUNT(*) 
     FROM table1 
     WHERE 
      column1 = 'value2' AND column2 = 0 
    ) AS Count4 
) CountSummary 

Dies ist nicht die richtige Syntax, aber ich bin nicht sicher, wie zu tun Dieses Konzept in SQL Server.

Dies ist der Fehler, den ich zur Zeit immer, wenn ich meinen zweiten Teil der Abfrage gleich machen: select * from table1

Msg 252, Level 16, State 1, Line 1 
Recursive common table expression 'table1' does not contain a top-level UNION ALL operator. 

Die riesige innere Join-Abfrage separat ohne Fehler werden können ausgeführt werden.

------------------- UPDATE --------------------------

Der rekursive Fehler wurde aufgrund der Benennung von 'table1' die gleiche wie eine Tabelle innerhalb der inneren Join-Abfrage Teil, ich habe das los, und der Fehler war weg. Dann habe ich die Antworten ausprobiert und beide haben funktioniert.

Antwort

1

Vielleicht etwas wie folgt aus: -

select 
    sum(case when column1 = 'value1' and column2 > 0 then 1 else 0 end) as Count1, 
    sum(case when column1 = 'value1' and column2 = 0 then 1 else 0 end) as Count2, 
    sum(case when column1 = 'value2' and column2 > 0 then 1 else 0 end) as Count3, 
    sum(case when column1 = 'value2' and column2 = 0 then 1 else 0 end) as Count4 
from table1 
+0

Wenn ich das versuchen bekomme ich diesen Fehler: Rekursive allgemeine Tabellenausdruck 'Tabelle1' enthält keine Top-Level-UNION ALL-Operator – Andi

+0

Sie haben nicht erwähnt, dass table1 ein CTE war ... können Sie den Rest Ihrer Anfrage posten, damit wir die ganze Geschichte sehen können? –

+0

Entschuldigung, ich wusste nicht, dass das die Lösung betrifft. aktualisiert. – Andi

1
dieses

Sie:

WITH table1 as(a huge inner joins between different tables) 

SELECT * FROM 
    (
     SELECT COUNT(*) AS Count1 
     FROM table1 
     WHERE 
      column1 = 'value1' AND column2 > 0 
    ) AS Count1, 
    (
     SELECT COUNT(*) AS Count2 
     FROM table1 
     WHERE 
      column1 = 'value1' AND column2 = 0 
    ) AS Count2 
Verwandte Themen