2个表中的计算列表达式

时间:2012-02-25 20:52:14

标签: sql command calculated-columns

我有产品表和详细信息表

产品

ID int
Price int

详细

ID int
Quantity int
Total int

我执行乘法Quantity * Price,要使用的SQL命令是什么?感谢

我使用

ALTER TABLE DETAIL
ADD Total AS Quantity * product.price where Detail.ID = Product.ID

4 个答案:

答案 0 :(得分:2)

您对使用的数据库系统并不十分清楚 - 这些都是特定于供应商的。

如果您使用的是SQL Server,答案很简单:不能执行此操作。

计算列不能引用另一个表 - 只有常量,来自同一个表的列 - 或存储的函数。

现在你可能能够创建一个存储的函数来从另一个表中获取数据 - 我会这样做。将数据访问放入存储的函数是性能灾难的必然结果 - 只是不要这样做!

此处的解决方案可能是两个表中的视图,可以进行计算

CREATE VIEW dbo.ProductAndDetail 
AS
   SELECT
       p.ID, p.Price,
       d.Quantity,  
       Total = ISNULL(d.Quantity, 0) * ISNULL(p.Price, 0.0)
   FROM
       dbo.Product p
   INNER JOIN
       dbo.Detail d ON p.ID = d.ID

然后您可以从这个新视图中选择:

SELECT ID, Price, Quantity, Total
FROM dbo.ProductAndDetail

并且Total为每一行“即时”计算

更新:啊 - 好吧,您似乎需要一个静态数据集进行报告 - 在这种情况下,您可以执行以下操作:

   SELECT
       p.ID, p.Price,
       d.Quantity,  
       Total = ISNULL(d.Quantity, 0) * ISNULL(p.Price, 0.0)
   INTO
       dbo.ProductAndDetailsForReporting
   FROM
       dbo.Product p
   INNER JOIN
       dbo.Detail d ON p.ID = d.ID

然后,您会收到一个新表dbo.ProductAndDetailsForReporting,其中包含ProductDetail以及计算出的Total列中的所有行。现在在该表上运行您的报告 - 它将不会更改,除非您自己更改某些内容(与视图不同,后者始终更新)。

答案 1 :(得分:0)

你的代码应该大致为

employe.Quantity * product.price where empoye.ID=product.ID

这是一个想法,应该帮助你。

答案 2 :(得分:0)

试试这个..

SELECT (Product.Price * Detail.Quantity) AS 'answer'
FROM Product
INNER JOIN Detail ON Product.ID = Detail.ID
WHERE Product.Price IS NOT NULL AND Detail.Quantity IS NOT NULL AND Product.Price != '' AND Detail.Quantity != ''

OR ..

SELECT (Product.Price * Detail.Quantity) AS 'answer'
FROM Product
LEFT OUTER JOIN Detail ON Product.ID = Detail.ID
WHERE Product.Price IS NOT NULL AND Product.Price != ''

答案 3 :(得分:0)

您只能根据同一个表中的其他列在表中创建计算列。如果要实现此目的,则需要创建一个触发器,在物理列中更新此值(触发器可以执行连接)。 (或者你可以创建一个视图)。