使用一列不同行中的值作为不同列中的值,但只有一行

Use values in different rows of a column as values in different columns but only one row

是否可以对行进行分组并将每一行的一个值用于不同的自定义列?

原文table:

ID      Tax        Amount
--------------------------
 1      21%         33,40
 1      10%         15,30
 1       4%          1,32
 2      21%         12,43
 2      10%          4,20

想要table:

ID     Tax 21%     Tax 10%     Tax 4%
--------------------------------------
 1      33,40       15,30       1,32
 2      12,43        4,20       0,00

你会怎么做? 提前致谢。

您可以尝试使用条件聚合函数,MAXCASE WHEN

CREATE TABLE T(
  ID INT,
  Tax VARCHAR(50),
  Amount FLOAT
);


INSERT INTO T VALUES (1,'21%',33.40);
INSERT INTO T VALUES (1,'10%',15.30);
INSERT INTO T VALUES (1,'4%',1.32);
INSERT INTO T VALUES (2,'21%',12.43);
INSERT INTO T VALUES (2,'10%',4.20);

查询 1:

SELECT ID,
       MAX(CASE WHEN Tax = '21%' THEN Amount ELSE 0 END) "Tax 21%",
       MAX(CASE WHEN Tax = '10%' THEN Amount ELSE 0 END) "Tax 10%",
      MAX(CASE WHEN Tax = '4%' THEN Amount ELSE 0 END) "Tax 4%"
FROM T
GROUP BY ID

Results:

| id | Tax 21% | Tax 10% | Tax 4% |
|----|---------|---------|--------|
|  1 |    33.4 |    15.3 |   1.32 |
|  2 |   12.43 |     4.2 |      0 |

您可以使用聚合函数 sum()

SELECT ID,
       sum(CASE WHEN Tax = '21%' THEN Amount ELSE 0 END) "Tax 21%",
       sum(CASE WHEN Tax = '10%' THEN Amount ELSE 0 END) "Tax 10%",
      sum(CASE WHEN Tax = '4%' THEN Amount ELSE 0 END) "Tax 4%"
FROM T
GROUP BY ID

id  Tax 21% Tax 10% Tax 4%
1   33.4    15.3    1.32
2   12.43   4.2     0

demo