将行的值填充到按日期分区的新列中
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 函数(在本例中 MIN
但 MAX
也同样有效)到 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
我有 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 函数(在本例中 MIN
但 MAX
也同样有效)到 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