繁体   English   中英

SQL:在TEMP表中使用UNION

[英]SQL: Using UNION Inside a TEMP Table

作业问题,请不要给我答案!

我正在尝试将去年的销售额与今年的销售额进行比较,而我使用的方法是使用一个临时表,该表包含2个由工会加入的Select语句

SELECT theatreNo,  SUM(lastMay) AS lastMay, SUM(thisMay) AS thisMay
FROM(
    SELECT
    theatreNo,
    COUNT(*) AS lastMay
    FROM Hospital_Operation
    WHERE year(startDateTime) = '2015' and month(startDateTime) = '05' 
    GROUP BY theatreNo, DATE_FORMAT(startDateTime, '%d%c%y')
    UNION ALL
    SELECT
    theatreNo,
    COUNT(*) AS thisMay
    FROM Hospital_Operation
    WHERE year(startDateTime) = '2016' and month(startDateTime) = '05' 
    GROUP BY theatreNo, DATE_FORMAT(startDateTime, '%d%c%y')
)AS Temp
GROUP BY theatreNo;

我收到错误消息:字段名称中的未知列“ thismay”

有人可以向我解释为什么我会收到此错误吗? 我的理解方式是我要加入表并将其存储在TEMP表中。

首先,在这里给您一种方法。

SELECT theatreNo,  SUM(lastMay) AS lastMay, SUM(thisMay) AS thisMay
FROM(
    SELECT
    theatreNo,
    COUNT(*) AS lastMay,
    0 AS thisMay
    FROM Hospital_Operation
    WHERE year(startDateTime) = '2015' and month(startDateTime) = '05' 
    GROUP BY theatreNo, DATE_FORMAT(startDateTime, '%d%c%y')
    UNION ALL
    SELECT
    theatreNo,
    0 AS lastMay,
    COUNT(*) AS thisMay
    FROM Hospital_Operation
    WHERE year(startDateTime) = '2016' and month(startDateTime) = '05' 
    GROUP BY theatreNo, DATE_FORMAT(startDateTime, '%d%c%y')
)AS Temp
GROUP BY theatreNo;

然后让我们做一些解释:

在您的Temp查询中,您使用UNION ALL ,第一个查询将确定该查询结果中的列名称,因此temp仅生成列theatreNolastMay ,然后在第二个查询中, thisMay将被第一个查询的lastMay ,因此当您在外部查询中选择列thisMay ,它导致未知列“ thismay”

这是有关UNION的官方文档:

第一个SELECT语句中的列名用作返回结果的列名。 每个SELECT语句的相应位置中列出的所选列应具有相同的数据类型。 (例如,第一条语句选择的第一列应与其他语句选择的第一列具有相同的类型。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM