是否可以将行转换为列然后根据特定值求和而不使用 sql 中的 Pivot 函数?
Is it possible to convert the rows to columns then sum the amount according to specific values without using Pivot function in sql?
是否可以将行转换为列并找到每个客户的笔记本电脑和台式机的金额总和,并将它们存储在笔记本电脑和台式机的单独列中而不使用数据透视表函数
table创作:
CREATE TABLE Customers
(
CustomerName VARCHAR(50),
ProductName VARCHAR(50),
Amount INT
);
INSERT INTO Customers VALUES('James', 'Laptop', 30000);
INSERT INTO Customers VALUES('James', 'Desktop', 25000);
INSERT INTO Customers VALUES('David', 'Laptop', 25000);
INSERT INTO Customers VALUES('Smith', 'Desktop', 30000);
INSERT INTO Customers VALUES('Pam', 'Laptop', 45000);
INSERT INTO Customers VALUES('Pam', 'Laptop', 30000);
INSERT INTO Customers VALUES('John', 'Desktop', 30000);
INSERT INTO Customers VALUES('John', 'Desktop', 30000);
INSERT INTO Customers VALUES('John', 'Laptop', 30000);
客户产出:
CustomerName ProductName Amount
James Laptop 30000
James Desktop 25000
David Laptop 25000
Smith Desktop 30000
Pam Laptop 45000
Pam Laptop 30000
John Desktop 30000
John Desktop 30000
John Laptop 30000
期望的输出:
CustomerName Laptop Desktop
David 25000 null
James 30000 25000
John 30000 60000
Pam 75000 null
Smith null 30000
有了已知的 ProductName
值,它可以用 CASE WHEN
查询
SELECT CustomerName,
SUM(CASE WHEN ProductName = 'Laptop' THEN Amount ELSE 0 END) Laptop,
SUM(CASE WHEN ProductName = 'Desktop' THEN Amount ELSE 0 END) Desktop
FROM Customers
GROUP BY CustomerName
是否可以将行转换为列并找到每个客户的笔记本电脑和台式机的金额总和,并将它们存储在笔记本电脑和台式机的单独列中而不使用数据透视表函数
table创作:
CREATE TABLE Customers
(
CustomerName VARCHAR(50),
ProductName VARCHAR(50),
Amount INT
);
INSERT INTO Customers VALUES('James', 'Laptop', 30000);
INSERT INTO Customers VALUES('James', 'Desktop', 25000);
INSERT INTO Customers VALUES('David', 'Laptop', 25000);
INSERT INTO Customers VALUES('Smith', 'Desktop', 30000);
INSERT INTO Customers VALUES('Pam', 'Laptop', 45000);
INSERT INTO Customers VALUES('Pam', 'Laptop', 30000);
INSERT INTO Customers VALUES('John', 'Desktop', 30000);
INSERT INTO Customers VALUES('John', 'Desktop', 30000);
INSERT INTO Customers VALUES('John', 'Laptop', 30000);
客户产出:
CustomerName ProductName Amount
James Laptop 30000
James Desktop 25000
David Laptop 25000
Smith Desktop 30000
Pam Laptop 45000
Pam Laptop 30000
John Desktop 30000
John Desktop 30000
John Laptop 30000
期望的输出:
CustomerName Laptop Desktop
David 25000 null
James 30000 25000
John 30000 60000
Pam 75000 null
Smith null 30000
有了已知的 ProductName
值,它可以用 CASE WHEN
SELECT CustomerName,
SUM(CASE WHEN ProductName = 'Laptop' THEN Amount ELSE 0 END) Laptop,
SUM(CASE WHEN ProductName = 'Desktop' THEN Amount ELSE 0 END) Desktop
FROM Customers
GROUP BY CustomerName