2016-08-03 38 views
0

Ich habe Schwierigkeiten mit der folgenden Aussage. Ich habe versucht, es auf mehrere Arten zu schreiben, aber verschiedene Fehler entsprechend erhalten. Ich möchte die Ergebnis-Ausgabe mit jeder Zählung in einer getrennten (aber angrenzenden) Spalte zu einer einzelnen Tabelle sein, etwa so ...SQL Server - Schwierigkeit mit COUNT Anweisung für mehrere Tabellen

 
--------+--------+-------- 
| alias1 | alias2 | alias3 | 
--------+--------+-------- 
| count1 | count2 | count3 | 
--------+--------+-------- 

Methode 1:

SELECT COUNT(*) 
FROM AdventureWorks2012.HumanResources.Department AS Alias1 
, (SELECT COUNT(*) 
    FROM AdventureWorks2012.HumanResources.Employee) AS Alias2 
, (SELECT COUNT(*) 
    FROM AdventureWorks2012.HumanResources.EmployeeDepartmentHistory) AS Alias3 

Dies gibt eine Fehler auf Alias2 (und Alias3) und erklärt: „es wurde keine Spalte für Spalte 1 von‚Alias2‘angegeben“

als ich dann versuchen, es zu überarbeiten, wie folgt:

SELECT COUNT(*) 
FROM AdventureWorks2012.HumanResources.Department AS Alias1 
, (SELECT COUNT(*) AS Alias2 
    FROM AdventureWorks2012.HumanResources.Employee) 
, (SELECT COUNT(*) AS Alias3 
    FROM AdventureWorks2012.HumanResources.EmployeeDepartmentHistory) 

Der Fehler verschiebt sich zu dem ',' das die SELECT-Anweisungen mit dem Fehler "Falsche Syntax in der Nähe von ',' trennt. Erwartet AS, ID oder QUOTED_ID.“

Was ich bin versucht, scheint einfach genug zu tun, aber ich komme leer aus. Jede Hilfe wäre sehr geschätzt.

+0

Welche Version von SQL-Server ist dieser Hinweis? Dieser natürliche Join ist de in zukünftigen Versionen präzisiert (Ich denke 2012 könnte noch funktionieren, aber nicht auf Outer Joins (* =) –

+1

@clifton_h SQL Server hat nie natürlichen Join unterstützt, meinst du die alte, nicht ANSI Joinsyntax (FROM a, b) was zu einem Cross-Join führt, wenn Sie die where-Klausel vergessen? Wenn ja, nein, es ist nicht veraltet. Nur nicht zu empfehlen. –

+0

Greg, warum nicht einfach [ziehe die Zählungen von 'sys.partitions' anstatt manuell alle Tabellen zu scannen] (http://sqlperformance.com/2014/10/t-sql-queries/bad-habits-count- der harte Weg)? Oder beschreibt diese fiktive Abfrage gegen AdventureWorks-Tabellen nicht wirklich Ihr tatsächliches Problem? –

Antwort

0

Eine Möglichkeit, das gewünschte Ergebnis zu erhalten wollen wäre jede Aussage als abgeleitete Tabelle zu verwenden:

SELECT * FROM 
(SELECT COUNT(*) AS Alias1 FROM AdventureWorks2012.HumanResources.Department) AS a1 , 
(SELECT COUNT(*) AS Alias2 FROM AdventureWorks2012.HumanResources.Employee) AS a2, 
(SELECT COUNT(*) AS Alias3 FROM AdventureWorks2012.HumanResources.EmployeeDepartmentHistory) AS a3 

(Oder Sie könnten die Aussagen als Unterabfragen verwenden, wie in einer anderen Antwort gezeigt)

1
SELECT 
    (SELECT COUNT(*) FROM AdventureWorks2012.HumanResources.Department) AS Alias1, 
    (SELECT COUNT(*) FROM AdventureWorks2012.HumanResources.Employee) AS Alias2, 
    (SELECT COUNT(*) FROM AdventureWorks2012.HumanResources.EmployeeDepartmentHistory) AS Alias3 
+0

Dies scheint genau wie gewünscht zu funktionieren. Vielen Dank, Anton! – TheyCallMeGreg