【问题标题】:Invalid column name when multiplying aliases乘以别名时列名无效
【发布时间】:2018-04-16 12:33:36
【问题描述】:

我有这两张表:

  • Cart_Details(Cart_ID、Product_ID、数量、小计)
  • 产品(Product_ID、名称、描述)

我的 SQL 语句:

SELECT TOP 5 
    t1.Product_ID, 
    t1.Name,
    t1.Category,
    (SELECT COUNT(*) 
     FROM Cart_Details
     WHERE Cart_Details.Product_ID = t1.Product_ID) AmountSold,
    (SELECT Quantity 
     FROM Cart_Details 
     WHERE t1.Product_ID = Cart_Details.Product_ID) AS Quantity,
    (Quantity * AmountSold) AS FinalSold
FROM 
    [dbo].[Product] t1

我正在尝试将别名(AmountSoldQuantity)的值相乘,结果为 FinalSold,但出现错误:

列名“AmountSold”无效。

列名“数量”无效。

我还有其他方法可以将两个别名中的值添加到新列中吗?

【问题讨论】:

  • 您不能在同一范围内引用别名。您可以使用 CTE/子查询重复表达式或嵌套。

标签: sql-server


【解决方案1】:

使用计算字段的一种方法是将其包装在子查询中:

SELECT 
    *,
    (Quantity*AmountSold)AS FinalSold
FROM (SELECT top 5 
         t1.Product_ID, 
         t1.Name,
         t1.Category,
         (select count(*) 
          from Cart_Details
          where Cart_Details.Product_ID=t1.Product_ID ) AmountSold,
         (select Quantity 
          from Cart_Details 
          where t1.Product_ID=Cart_Details.Product_ID) AS Quantity,
    FROM [dbo].[Product] t1) AS InnerTable

【讨论】:

    【解决方案2】:

    另一种方法是使用 CTE:

    ;WITH CTEQuery AS 
     (SELECT  
             t1.Product_ID, 
             t1.Name,
             t1.Category,
            (select count(*) 
             from   Cart_Details
             where  Cart_Details.Product_ID = t1.Product_ID) AmountSold,
            (select Quantity 
             from   Cart_Details 
             where  t1.Product_ID=Cart_Details.Product_ID) AS Quantity             
       FROM [dbo].[Product] t1)
    
    SELECT  top 5 (Quantity*AmountSold) AS FinalSold, *
    FROM    CTEQuery
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多