2 Stimmen

Kann eine Abfrage anstelle einer Tabelle in SQL Server verwendet werden?

Das sollte wirklich erlaubt sein - ich verstehe nicht, warum es nicht erlaubt ist.

SELECT * 
FROM (
    SELECT * 
    FROM MyTable
)

10voto

Andrew Punkte 25704

In SQL Server ist dies erlaubt, aber der innere Select muss einen Namen erhalten, wie z. B.:

SELECT *  
FROM ( 
    SELECT *  
    FROM MyTable
) m

Wenn kein Name angegeben wird, wird ein falscher Syntaxfehler in der Nähe von ')' gemeldet.

6voto

Wenn Sie einen Tabellenalias hinzufügen, sollte es funktionieren:

SELECT * 
FROM (
    SELECT * 
    FROM MyTable
) as A

4voto

Rob Punkte 515

Es fehlt ein 'Alias' für die Unterabfrage (Ich habe einen Alias 'X' hinzugefügt)

SELECT * 
FROM (
    SELECT * 
    FROM MyTable
) X

2voto

Chris McCall Punkte 10153

Es gibt mindestens zwei Möglichkeiten, dies zu erreichen, aber was Sie vielleicht suchen, ist eine Gemeinsamer Tabellenausdruck (CTE) , eingeführt in SQL Server 2005.

Aus dem obigen Link:

USE AdventureWorks;
GO
WITH Sales_CTE (SalesPersonID, NumberOfOrders, MaxDate)
AS
(
    SELECT SalesPersonID, COUNT(*), MAX(OrderDate)
    FROM Sales.SalesOrderHeader
    GROUP BY SalesPersonID
)
SELECT E.EmployeeID, OS.NumberOfOrders, OS.MaxDate,
    E.ManagerID, OM.NumberOfOrders, OM.MaxDate
FROM HumanResources.Employee AS E
    JOIN Sales_CTE AS OS
    ON E.EmployeeID = OS.SalesPersonID
    LEFT OUTER JOIN Sales_CTE AS OM
    ON E.ManagerID = OM.SalesPersonID
ORDER BY E.EmployeeID;
GO

Alternativ können Sie auch eine Siehe die eine permanente tabellenförmige Darstellung einer Abfrage ist, auf die Sie über den Namen zugreifen können:

USE AdventureWorks ;
GO
IF OBJECT_ID ('hiredate_view', 'V') IS NOT NULL
DROP VIEW hiredate_view ;
GO
CREATE VIEW hiredate_view
AS 
SELECT c.FirstName, c.LastName, e.EmployeeID, e.HireDate
FROM HumanResources.Employee e JOIN Person.Contact c on e.ContactID = c.ContactID ;
GO
SELECT * FROM hiredate_view

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X