Sql 如何将特定行转换为列

Sql 如何将特定行转换为列,sql,hive,Sql,Hive,我每月根据国家和产品统计账户。我最终得到一张表格,上面显示了每个月的国家和产品,以及当月的数量。我希望能够从该表中提取每个产品和国家,然后为每个月创建一列计数 +---------------+--------------+---------+-----------------+ | plcmnt_mnth | product_code | ctry_cd | accounts_placed | +---------------+--------------+---------+-----

我每月根据国家和产品统计账户。我最终得到一张表格,上面显示了每个月的国家和产品,以及当月的数量。我希望能够从该表中提取每个产品和国家,然后为每个月创建一列计数


+---------------+--------------+---------+-----------------+
|  plcmnt_mnth  | product_code | ctry_cd | accounts_placed |
+---------------+--------------+---------+-----------------+
| August        | Lending      | AR      |             751 |
| August        | Charge       | MX      |            2137 |
| August        | Charge       | AR      |             240 |
| August        | Lending      | MX      |            3307 |
| July          | Charge       | AR      |              67 |
| July          | Lending      | AR      |             122 |
| July          | Charge       | MX      |             977 |
| July          | Lending      | MX      |             694 |
| Pre-June 2019 | Charge       | AR      |              16 |
| Pre-June 2019 | Lending      | AR      |              25 |
| Pre-June 2019 | Charge       | MX      |              76 |
| Pre-June 2019 | Lending      | MX      |              72 |
+---------------+--------------+---------+-----------------+
我尝试过使用CASE,但对于plcmnt,我尝试过使用coalesce,但似乎无法正确使用它。我也试着在这里寻找关于转置的其他问题,但似乎找不到一个适合我正在尝试做的

这是我用来提取数据的代码。它是从一个包含所有帐户的表中提取的

select plcmnt_mnth, product_code, ctry_cd,  count(acct) as accounts_placed
from cj_test_placements
group by plcmnt_mnth, product_code, ctry_cd;
我希望每个月都能看到一个新的专栏。从中提取的表格设置为将2019年6月之前的任何日期标记为2019年6月之前的日期,之后的每个月均按月计算。我希望能够做到这一点,一旦我们到了10月份,有一个10月份的计数,它会添加另一列,然后是11月份等等


+--------------+---------+---------------+------+--------+
| product_code | ctry_cd | Pre-June 2019 | July | August |
+--------------+---------+---------------+------+--------+
| Charge       | AR      |            16 |   67 |    240 |
| Lending      | AR      |            25 |  122 |    751 |
| Charge       | MX      |            76 |  977 |   2137 |
| Lending      | MX      |            72 |  694 |   3307 |
+--------------+---------+---------------+------+--------+


下面是如何实现
case
语句

select 
product_code, 
ctry_code, 
max(case when accounts_placement_mnth='Pre-June 2019' then accounts_placed end) as Pre-June-2019,
max(case when accounts_placement_mnth='July' then accounts_placed end) as July,
max(case when accounts_placement_mnth='August' then accounts_placed end) as August
from cj_test_placements
group by product_code, ctry_code;

这是我在案例陈述中尝试的方法,它确实为我提供了每个月的列,但我仍然为每个产品代码和ctry_cd保留了一行。因此,不是一行显示“费用”“AR”“16”“67”“240”,而是三行显示2019年6月之前的计数,然后是7月和8月的空白,然后是另一行显示6月之前的空白,然后是7月和8月的空白。我想让coutns显示在一排。谢谢@String一旦我添加了MAX,它就真的把它清理干净了,看起来就像我想尝试的那样。我还有一个问题,如果我加上全年的月份,10月、11月、12月,它会把它们作为空白,有没有一种简单的方法可以删除未来月份的列?如果没有,我可以通过粘贴到excel中然后隐藏在表中来处理此问题。@Sotark我认为您看到的是空白,因为您在这几个月内没有任何帐户,因此无法以动态方式显示列。如果您希望传达,您可以将查询改写为在这几个月内“不适用”。