对于一项家庭作业,我需要编写一个查询,以显示不同类型的库存(咖啡,茶或NULL)及其总价值(库存*价格)的总和,因此它应该是3x2的表格查询运行。完整的问题是:“创建一个名为CoffeeTotal.sql的新查询,该查询将汇总每种商品类型(咖啡和茶)的价格。使用CASE语句并按商品类型显示结果。将“总价值”转换为一个“ $”。“
我知道输出应该是:
Coffee | $1242571.75
Tea | $211716.70
NULL | $1455288.45
但是我正在努力编写查询。目前,我的尝试是:
SELECT DISTINCT ItemType AS "Product Type",
SUM(CASE WHEN ItemType = 'Coffee' THEN Price*OnHand),
SUM(CASE WHEN ItemType = 'Tea' THEN Price*OnHand),
SUM(CASE WHEN ISNULL(ItemType) THEN Price*OnHand)
FROM Inventory
但是我100%确信此代码是错误的,此时我完全不知道如何添加'$'。预先谢谢你。
答案 0 :(得分:1)
一种可能的方法,将GROUP BY
与CASE
和FORMAT()函数一起使用(如果使用SQL Server 2012 +):
输入:
CREATE TABLE #Inventory (
ItemType varchar(10),
Price numeric(10, 2),
OnHand int
)
INSERT INTO #Inventory
(ItemType, Price, OnHand)
VALUES
('Coffee', 1.02, 21),
('Coffee', 1.02, 22),
('Coffee', 1.02, 23),
('Coffee', 1.02, 24),
('Tea', 2.01, 11),
('Tea', 2.01, 12),
('Drink', 3.03, 1),
(NULL, 13.13, 3)
T-SQL:
SELECT
CASE
WHEN ItemType <> 'Coffee' AND ItemType <> 'Tea' THEN NULL
ELSE ItemType
END AS ItemType,
FORMAT(SUM(Price * OnHand), '$0.00') AS Total
FROM #Inventory
GROUP BY
CASE
WHEN ItemType <> 'Coffee' AND ItemType <> 'Tea' THEN NULL
ELSE ItemType
END
输出:
ItemType Total
NULL $42,42
Coffee $91,80
Tea $46,23