我需要在表格中插入4列,其中第四列是第二列和第三列的总和。 所需输出的逻辑等效如下,但它在语法上不正确。 重点是MISCPRICE的计算很复杂,我想用这个结果来找到总数。
INSERT INTO TABLE1 (ID, BASEPRICE, MISCPRICE, TOTAL)
SELECT TABLE2.ID, TABLE2.BASEPRICE,
(SELECT (SELECT SUM(PRICE) FROM TABLE3 WHERE TABLE2.ID = TABLE3.ID)
+ TABLE4.TAX + TABLE4.MISC
FROM TABLE4
WHERE TABLE4.ID = TABLE2.ID), ?????
FROM TABLE2
WHERE TABLE2.ID NOT IN
(SELECT TABLE1.ID
FROM TABLE1)
--ONLY INSERTING WHEN THE ID IS NOT ALREADY PRESENT IN THE TABLE
所以要找到总数,我可以做类似下面的事情,但这意味着重复MISCPRICE的整个计算,这是一个性能开销,而且看起来也很混乱。
TABLE2.BASEPRICE
+
(SELECT (SELECT SUM(PRICE) FROM TABLE3 WHERE TABLE2.ID = TABLE3.ID)
+ TABLE4.TAX + TABLE4.MISC
FROM TABLE4
WHERE TABLE4.ID = TABLE2.ID)
我尝试使用(BASEPRICE + MISCPRICE)总计,但它说
无效的列名“BASEPRICE”
有没有办法重复使用计算列MISPRICE来查找插入时的总数?
我确实使用临时表解决了这个问题并使用变量计算行。但我希望尽可能避免这种情况。
答案 0 :(得分:3)
尝试将其包装在另一个选择中虽然我同意@GordonLinoff在评论中认为理想的解决方案不是以这种方式存储价值。对于您的数据库系统,确切的systax可能略有不同。
INSERT INTO TABLE1 VALUES(ID, BASEPRICE, MISCPRICE, TOTAL)
SELECT ID, BASEPRICE, MISCPRICE, BASEPRICE + MISCPRICE FROM (
SELECT TABLE2.ID, TABLE2.BASEPRICE,
(SELECT (SELECT SUM(PRICE) FROM TABLE3 WHERE TABLE2.ID = TABLE3.ID)
+ TABLE4.TAX + TABLE4.MISC
FROM TABLE4
WHERE TABLE4.ID = TABLE2.ID) AS MISCPRICE
FROM TABLE2 WHERE TABLE2.ID NOT IN
(SELECT TABLE1.ID
FROM TABLE1.ID)) TEMP_VIEW