我有产品表和详细信息表
产品
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
答案 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
,其中包含Product
和Detail
以及计算出的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)
您只能根据同一个表中的其他列在表中创建计算列。如果要实现此目的,则需要创建一个触发器,在物理列中更新此值(触发器可以执行连接)。 (或者你可以创建一个视图)。