尽管我对SQL Server知之甚少,但我仍然坚持这个问题一段时间:
我正在尝试获取两列产品的最终总和,但SQL Server无法识别我的上一列。这是查询:
SELECT
Products.customName AS 'Name',
Ordered_Products.scanned AS 'Sent Quantity',
Charged_Products.price AS 'Product Price',
Ordered_Products.scanned * Charged_Products.price AS 'Charged'
FROM Products
JOIN Charged_Products
ON Products.productsId = Charged_Products.productsId
JOIN Ordered_Products
ON Ordered_Products.productsId = Products.productsId
WHERE
Ordered_Products.ordersId = 500 AND
Ordered_Products.scanned > 0
UNION ALL
SELECT 'TOTAL', '', '', SUM('Charged')
看起来应该是这样的:
有人能指出我正确的方向让查询有效吗?任何帮助将不胜感激。
答案 0 :(得分:3)
您最好在客户端执行此操作。
但如果你想要这么多,那就用GROUPING SETS
。
SELECT ISNULL (Products.customName, 'TOTAL') AS 'Name'
, Ordered_Products.scanned AS 'Sent Quantity'
, Charged_Products.price AS 'Product Price'
, SUM (Ordered_Products.scanned * Charged_Products.price) AS 'Charged'
FROM Products
INNER JOIN Charged_Products ON Products.productsId = Charged_Products.productsId
INNER JOIN Ordered_Products ON Ordered_Products.productsId = Products.productsId
WHERE Ordered_Products.ordersId = 500
AND Ordered_Products.scanned > 0
GROUP BY GROUPING SETS ((Products.customName, Ordered_Products.scanned, Charged_Products.price),())
答案 1 :(得分:2)
GROUPING SETS是您可能需要的。请检查此sql fiddle
以下应该可以工作,但不是很确定,因为我没有用实际数据检查它。此外,它在性能方面看起来也不太好。
SELECT
Products.customName AS 'Name',
Ordered_Products.scanned AS 'Sent Quantity',
Charged_Products.price AS 'Product Price',
Ordered_Products.scanned * Charged_Products.price AS 'Charged'
FROM Products
JOIN Charged_Products
ON Products.productsId = Charged_Products.productsId
JOIN Ordered_Products
ON Ordered_Products.productsId = Products.productsId
WHERE
Ordered_Products.ordersId = 500 AND
Ordered_Products.scanned > 0
UNION ALL
SELECT 'TOTAL', '', '', SUM(Ordered_Products.scanned * Charged_Products.price)
FROM Products
JOIN Charged_Products
ON Products.productsId = Charged_Products.productsId
JOIN Ordered_Products
ON Ordered_Products.productsId = Products.productsId
WHERE
Ordered_Products.ordersId = 500 AND
Ordered_Products.scanned > 0
希望这有帮助。
答案 2 :(得分:2)
你可以这样做:
SELECT
Products.customName AS 'Name',
Ordered_Products.scanned AS 'Sent Quantity',
Charged_Products.price AS 'Product Price',
Ordered_Products.scanned * Charged_Products.price AS 'Charged'
FROM Products
JOIN Charged_Products
ON Products.productsId = Charged_Products.productsId
JOIN Ordered_Products
ON Ordered_Products.productsId = Products.productsId
WHERE
Ordered_Products.ordersId = 500 AND
Ordered_Products.scanned > 0
UNION ALL
SELECT 'TOTAL', '', '', SUM(Ordered_Products.scanned * Charged_Products.price)
FROM Products
JOIN Charged_Products
ON Products.productsId = Charged_Products.productsId
JOIN Ordered_Products
ON Ordered_Products.productsId = Products.productsId
WHERE
Ordered_Products.ordersId = 500 AND
Ordered_Products.scanned > 0
答案 3 :(得分:0)
DECLARE @TableName TABLE
( [name] varchar(20), [attribute] INT, [value] int)
;
INSERT INTO @TableName
( [name], [attribute], [value])
VALUES
('Product1', 2, 15),
('Product2', 3, 30),
('Product3', 3, 20)
select name,attribute,value,attribute * value As Total from @TableName
UNION ALL
Select 'T0tal','','',SUM(attribute * value) from @TableName