问题描述
我想更改一列中的值的名称,该值将基于同一行中另一列中的值。
我正在使用GROUP BY运算符,并使用CUBE关键字。
这是我用来创建表格的代码:
CREATE TABLE [dbo].[Purchase_Items]
(
[ID] [int] NULL,[Model_Name] [varchar](50) NULL,[Brand] [varchar](50) NULL,[Price] [decimal](18,2) NULL,[PurchaseDate] [date] NULL
);
INSERT [dbo].[Purchase_Items] ([ID],[Model_Name],[Brand],[Price],[PurchaseDate])
VALUES (5,N'iPhone X',N'Apple',CAST(50000.00 AS Decimal(18,2)),CAST(N'2020-02-03' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (6,N'iPhone 11',CAST(70000.00 AS Decimal(18,CAST(N'2020-02-07' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (7,N'iPhone 6s',CAST(20000.00 AS Decimal(18,CAST(N'2020-02-10' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (8,N'iPhone 8',CAST(30000.00 AS Decimal(18,CAST(N'2020-02-21' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (13,N'Redmi 9',N'Xiaomi',CAST(10000.00 AS Decimal(18,CAST(N'2020-03-21' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (14,N'Redmi K30',CAST(25000.00 AS Decimal(18,CAST(N'2020-04-03' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (15,N'Mi Note 10',CAST(15000.00 AS Decimal(18,CAST(N'2020-04-21' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (16,N'BlackShark',CAST(N'2020-04-20' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (17,CAST(N'2020-04-22' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (18,CAST(N'2020-05-03' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (22,CAST(N'2020-05-21' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (23,N'BlackShark 3',CAST(N'2020-05-22' AS Date));
INSERT [dbo].[Purchase_Items] ([ID],[PurchaseDate])
VALUES (25,CAST(N'2020-05-10' AS Date));
这是我的查询:
SELECT month(PurchaseDate) Month,CASE WHEN month(PurchaseDate) is null then CONCAT('Grand Total for ',Brand)
ELSE COALESCE(Brand,'Monthly Subtotal') end AS Brand,SUM(Price) as 'Total Amount'
FROM Purchase_Items
GROUP BY CUBE(month(PurchaseDate),Brand)
这是输出:
Purchase Month | Brand | Total Amount
---------------------------------------------------------
3 | Xiaomi | 10000.00
4 | Xiaomi | 70000.00
5 | Xiaomi | 30000.00
NULL | Grand Total for Xiaomi | 110000.00
2 | Apple | 170000.00
4 | Apple | 70000.00
5 | Apple | 170000.00
NULL | Grand Total for Apple | 410000.00
NULL | Grand Total for | 520000.00
1 | Monthly Subtotal | 250000.00
2 | Monthly Subtotal | 200000.00
3 | Monthly Subtotal | 70000.00
我想将“总计”更改为“总计”,但我不知道如何。
我在想是否可以根据“总计”列中的最高数字进行更改,因为它们共享同一行,但是也许还有其他方法可以解决此问题。
我该如何解决?
解决方法
测试类似
----------------------------------------
| value |
| metric | season | type |
------------------------------------
| metric1 | A | abc1.| 1
1
1
1
| metric2 |. B | abc1.| 2
2
2
2
| metric3 |. A. | def1 | 3
3
3
3
| metric4 | B. | def1 | 4
4
4
4
----------------------------------------
在第一种情况下-也许CASE WHEN month(PurchaseDate) IS NULL AND Brand IS NULL THEN 'Grand Total'
WHEN month(PurchaseDate) IS NULL THEN CONCAT('Grand Total for ',Brand)
ELSE COALESCE(Brand,'Monthly Subtotal')
END AS Brand,
就足够了?