将行的值填充到按日期分区的新列中

populate a value of a row into a new column partitioned by date

我有 5 列,我想创建第 6 列,其中 $ 列的值 'x5 row' 按日期分区。

到目前为止,我看到的唯一方法是将其逆透视并将每个 $ 值放入单独的列中。

但是是否可以使用一些参考来制作第 6 列?

date    sort    category    %   $                   6 th column(to be created)
1/31/2017   0   x1  5.27478     5,406,339,989.60    -31,567,300
1/31/2017   4   x2  5.03073     -21,611,583.57      -31,567,300
1/31/2017   3   x3  5.91494     4,122,330.91        -31,567,300
1/31/2017   1   x4  5.34965     5,754,418,975.28    -31,567,300
1/31/2017   5   x5  5.29412     -31,567,300         -31,567,300
1/31/2017   2.2 x6  7.99999     -250,488.32         -31,567,300
1/31/2017   6   x7  6.16547     -4,984,148.73       -31,567,300
2/28/2017   4   x1  5.04686     -20,182,279.41      5,807,539,814.96
2/28/2017   2.2 x2  5.33533     -176,195.29         5,807,539,814.96
2/28/2017   6   x3  6.13669     -3,455,249.32       5,807,539,814.96
2/28/2017   2.1 x4  5.48088     49,709,482.70       5,807,539,814.96
2/28/2017   1   x5  5.27017     5,807,539,814.96    5,807,539,814.96
2/28/2017   0   x6  5.34965     5,754,418,975.28    5,807,539,814.96
2/28/2017   3   x7  5.32231     23,327,653.12       5,807,539,814.96

您可以使用 window 函数(在本例中 MINMAX 也同样有效)到 select 只有 $ 的值当类别为 x5:

SELECT *,
       MIN(CASE WHEN category = 'x5' THEN Dollar END) OVER (PARTITION BY date) AS "6th Column"
FROM data

请注意,我假设您的 $ 列实际上称为 Dollar,您可以根据需要进行更改。

Demo on SQLFiddle(对于 SQL 服务器,但在 Teradata 上应该可以正常工作)

您可以尝试这样的操作来获得您需要的东西,

      SELECT a.*,b.
      FROM TABLE a
      LEFT JOIN
      (SELECT Date,sum($) as 
      FROM Table 
      WHERE category = 'x5'
      GROUP BY  Date) b
      on a.Date=b.Date