无效的列名“销售季度”错误消息

Posted

技术标签:

【中文标题】无效的列名“销售季度”错误消息【英文标题】:Invalid column name 'Sales Quarter' Errror Message 【发布时间】:2019-01-30 04:56:34 【问题描述】:

我正在处理下面的 SQL。

我的目标是:

1) 连接 FirstName 和 LastName 并将它们放在名为 Employee Name 的列中。

2) 仅从 InvoiceDate 列中提取年份。

3) 根据 InvoiceDate 确定季度并将它们放入名为 Sales Quarter 的列中。

4) 确定最大值、计数和总和,并将它们放入名为最高价格、销售额和总销售额的列中。

5) 按年份和销售季度分组。

6) 按员工姓名、年份和销售季度排序。

执行下面的代码时,我收到以下消息。

“列名“销售季度”无效。

我不知道我做错了什么......任何建议都会很有帮助。

SELECT 
    CONCAT(E.FirstName,' ', E.LastName) AS "Employee Name"
    , YEAR(I.InvoiceDate) AS "Fiscal Year"
    , CASE 
        WHEN MONTH(I.InvoiceDate) BETWEEN 1 AND 3 THEN 'First'
        WHEN MONTH(I.InvoiceDate) BETWEEN 4 AND 6 THEN 'Second'
        WHEN MONTH(I.InvoiceDate) BETWEEN 7 AND 9 THEN 'Third'
        WHEN MONTH(I.InvoiceDate) BETWEEN 10 AND 12 THEN 'Fourth'
        END "Sales Quarter"
    , MAX(I.Total) AS "Highest Price"
    , COUNT(*) AS "Number of Sales"
    , SUM(IL.UnitPrice) AS "Total Sales"

FROM Employee E
LEFT JOIN Customer C
    ON E.EmployeeId = C.SupportRepId
JOIN Invoice I
    ON C.CustomerId = I.CustomerId
JOIN InvoiceLine IL
    ON I.InvoiceId = IL.InvoiceId 

WHERE I.InvoiceDate  BETWEEN '2010-01-01' AND '2012-06-30'

GROUP BY YEAR(I.InvoiceDate), "Sales Quarter"
ORDER BY CONCAT(E.FirstName,' ', E.LastName), YEAR(I.InvoiceDate), "Sales Quarter"

【问题讨论】:

【参考方案1】:

您可以在下面尝试 - 在 group by 子句中别名不被识别

SELECT 
    CONCAT(E.FirstName,' ', E.LastName) AS "Employee Name"
    , YEAR(I.InvoiceDate) AS "Fiscal Year"
    , CASE 
        WHEN MONTH(I.InvoiceDate) BETWEEN 1 AND 3 THEN 'First'
        WHEN MONTH(I.InvoiceDate) BETWEEN 4 AND 6 THEN 'Second'
        WHEN MONTH(I.InvoiceDate) BETWEEN 7 AND 9 THEN 'Third'
        WHEN MONTH(I.InvoiceDate) BETWEEN 10 AND 12 THEN 'Fourth'
        END "Sales Quarter"
    , MAX(I.Total) AS "Highest Price"
    , COUNT(*) AS "Number of Sales"
    , SUM(IL.UnitPrice) AS "Total Sales"

FROM Employee E
LEFT JOIN Customer C
    ON E.EmployeeId = C.SupportRepId
JOIN Invoice I
    ON C.CustomerId = I.CustomerId
JOIN InvoiceLine IL
    ON I.InvoiceId = IL.InvoiceId 

WHERE I.InvoiceDate  BETWEEN '2010-01-01' AND '2012-06-30'

GROUP BY YEAR(I.InvoiceDate), CONCAT(E.FirstName,' ', E.LastName),DATEPART ( qq,I.InvoiceDate )  ,CASE 
        WHEN MONTH(I.InvoiceDate) BETWEEN 1 AND 3 THEN 'First'
        WHEN MONTH(I.InvoiceDate) BETWEEN 4 AND 6 THEN 'Second'
        WHEN MONTH(I.InvoiceDate) BETWEEN 7 AND 9 THEN 'Third'
        WHEN MONTH(I.InvoiceDate) BETWEEN 10 AND 12 THEN 'Fourth'
        END
ORDER BY CONCAT(E.FirstName,' ', E.LastName), YEAR(I.InvoiceDate), DATEPART ( qq,I.InvoiceDate )  

【讨论】:

我忘了添加一个目标,即按字母顺序而不是字母顺序列出“第一”、“第二”、“第三”、“第四”?我不知道如何执行? 嗯,我刚刚运行它并呈现以下错误消息: Msg 8120, Level 16, State 1, Line 2 Column 'Employee.FirstName' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。消息 8120,级别 16,状态 1,行 2 列 'Employee.LastName' 在选择列表中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。 @tonykaroshi,您现在可以查看 - 您还需要在 group by 子句中添加 CONCAT(E.FirstName,' ', E.LastName) 我仍然收到错误消息:消息 8127,级别 16,状态 1,第 30 行列“Invoice.InvoiceDate”在 ORDER BY 子句中无效,因为它不包含在任一聚合函数中或 GROUP BY 子句。

以上是关于无效的列名“销售季度”错误消息的主要内容,如果未能解决你的问题,请参考以下文章

ALTER VIEW 给出无效的列名,但 SELECT 工作正常

所有列名无效

Hibernate 本机查询:无效的列名错误 SQL-17006

SQL Server 错误无效的列名“NaN”

执行查询时出现“选择列表中的列名无效”错误

将pandas DataFrame写入sql时出现无效列名错误