在SQL中使用整个查询作为表名

5
如何将整个选择语句查询命名为表 ->
(select col1,col2,col3
from customers ..
where col1 ....) as Table1;
我想对这三个表执行此操作,然后在同一SQL语法中继续使用它们。我稍后对这些表(Table1,Table2,Table3)执行的操作是-将它们组合(TableX),使用某些过滤器计算Table1中的值并显示为TableX旁边的列。
我能够在Microsoft Access中执行此操作,因为我可以单独存储所有三个表,使用过滤器分别操作它们,然后编写单独的查询以组合、计数和显示结果作为一个最终表。但我无法在SQL中编写单个从头到尾的查询。请帮忙!
2个回答

6
你提到可以使用Microsoft Access完成这个任务,因此我假设你现在没有在使用它。 在T-SQL(SQL Server)中,你可以使用WITH语句。
WITH Tab1 AS (
  SELECT
    * 
  FROM
    TabA
),  Tab2 AS (
  SELECT
    * 
  FROM
    TabB
), Tab3 AS (
  SELECT
    * 
  FROM
    TabC
)

SELECT
  *
FROM
  Tab1
INNER JOIN
  Tab2
ON
  1=1
INNER JOIN
  Tab3
ON
  1=1

1

是的,您可以在Access SQL中使用类似“表”的别名子查询:

SELECT q1.DonorID, q1.LastName, SUM(q2.Amount) AS SumOfAmount
FROM
    (
        SELECT DonorID, LastName
        FROM tblDonors
        WHERE LastName LIKE 'Thomp*'
    ) AS q1
    INNER JOIN
    (
        SELECT DonorID, Amount
        FROM tblDonations
        WHERE Amount < 5
    ) AS q2
        ON q1.DonorID = q2.DonorID
GROUP BY q1.DonorID, q1.LastName

谢谢Gord。这个方法很有效。我发现这些表中有几列不匹配,所以我必须使用全外连接来连接它们。 - ASuit
我现在有一个新问题。在合并了3个表之后,我正在将结果导出到Excel中。在每个空列上,我都会得到“?”。我需要在我的SQL查询中用空白替换它们。 - ASuit
我想在这里使用CASE语句。 CASE WHEN col1 IS NULL THEN [col2] END 就像这样。我必须更改表1中的内容。并且,在表X中显示表1、2、3的组合。请帮忙! - ASuit
这些新查询将在Microsoft SQL Server下运行吗? - Gord Thompson
它在其中一个表格中。无论如何,我解决了这个部分。非常感谢你的帮助。 - ASuit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接