在 Teradata 中将行转换为 SQL 中的列

发布于 2025-01-10 15:48:13 字数 1224 浏览 3 评论 0原文

我的数据如下所示:

姓名日期Bal
John2022-01-0110
John2022-01-024
John2022-01-037
David2022-01-0113
David2022-01-0215
David2022-01 -0320

我想要将 Bal 列填充到下面date 列,例如:

Name2022-01-012022-01-022022-01-03
John1047
David131520

我尝试过,

SELECT 
NAME,
CASE WHEN DATE= '2022-01-01' THEN EOD_BALANCE ELSE NULL END "01-Jan-22",
CASE WHEN DATE= '2022-01-02' THEN EOD_BALANCE ELSE NULL END "02-Jan-22"
FROM TABL1

但没有得到所需的结果。以下是第一个答案中查询的结果:

在此处输入图像描述

I have data which looks like this:

NameDateBal
John2022-01-0110
John2022-01-024
John2022-01-037
David2022-01-0113
David2022-01-0215
David2022-01-0320

I want the Bal column populated under date column, like:

Name2022-01-012022-01-022022-01-03
John1047
David131520

What I tried is

SELECT 
NAME,
CASE WHEN DATE= '2022-01-01' THEN EOD_BALANCE ELSE NULL END "01-Jan-22",
CASE WHEN DATE= '2022-01-02' THEN EOD_BALANCE ELSE NULL END "02-Jan-22"
FROM TABL1

but I am not getting the required results. Below are the results from query in first answer:

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

江心雾 2025-01-17 15:48:13

您需要在这里进行数据透视查询,这意味着您应该按名称聚合,然后取 CASE 表达式的最大值:

SELECT 
    NAME,
    MAX(CASE WHEN DATE = '2022-01-01' THEN EOD_BALANCE END) AS "01-Jan-22",
    MAX(CASE WHEN DATE = '2022-01-02' THEN EOD_BALANCE END) AS "02-Jan-22",
    MAX(CASE WHEN DATE = '2022-01-03' THEN EOD_BALANCE END) AS "03-Jan-22" 
FROM TABL1
GROUP BY NAME;

You want a pivot query here, which means you should aggregate by name and then take the max of the CASE expressions:

SELECT 
    NAME,
    MAX(CASE WHEN DATE = '2022-01-01' THEN EOD_BALANCE END) AS "01-Jan-22",
    MAX(CASE WHEN DATE = '2022-01-02' THEN EOD_BALANCE END) AS "02-Jan-22",
    MAX(CASE WHEN DATE = '2022-01-03' THEN EOD_BALANCE END) AS "03-Jan-22" 
FROM TABL1
GROUP BY NAME;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文