SQL 将列 header 更改为另一列的值
SQL Change Column header to value from another column
我正在尝试提取多只股票的价格数据。一切都在列中,包括当我尝试为不止一只股票提取数据时的代码,我无法弄清楚如何在每只股票的 header 列中设置代码。以下代码适用于一只股票,但 returns 不适用于两只股票。
这是我得到的一只股票:
RecDate TKR PRI
9/18/2002 CVS 13.86
但我希望能够得到这个:
RecDate CVS ORCL
9/18/2002 13.86 60
一直在用这个来拉高价格:
SELECT RecDate, TKR, PRI FROM dbo.Stockdatabase
WHERE RecDate >= DateAdd(YEAR, -5, GetDate()) AND TKR='CSCO'
ORDER BY TKR
我如何对多只股票进行这项工作?谢谢!
您可以使用条件聚合或 pivot
:
SELECT RecDate,
MAX(CASE WHEN TKR = 'CSCO' THEN PRI END) as pri_csco,
MAX(CASE WHEN TKR = 'ABC' THEN PRI END) as pri_abc
FROM dbo.Stockdatabase s
WHERE RecDate >= DateAdd(YEAR, -5, GetDate()) AND
TKR IN ('CSCO' , 'ABC')
GROPU BY RecDate
ORDER BY RecDate;
我正在尝试提取多只股票的价格数据。一切都在列中,包括当我尝试为不止一只股票提取数据时的代码,我无法弄清楚如何在每只股票的 header 列中设置代码。以下代码适用于一只股票,但 returns 不适用于两只股票。
这是我得到的一只股票:
RecDate TKR PRI
9/18/2002 CVS 13.86
但我希望能够得到这个:
RecDate CVS ORCL
9/18/2002 13.86 60
一直在用这个来拉高价格:
SELECT RecDate, TKR, PRI FROM dbo.Stockdatabase
WHERE RecDate >= DateAdd(YEAR, -5, GetDate()) AND TKR='CSCO'
ORDER BY TKR
我如何对多只股票进行这项工作?谢谢!
您可以使用条件聚合或 pivot
:
SELECT RecDate,
MAX(CASE WHEN TKR = 'CSCO' THEN PRI END) as pri_csco,
MAX(CASE WHEN TKR = 'ABC' THEN PRI END) as pri_abc
FROM dbo.Stockdatabase s
WHERE RecDate >= DateAdd(YEAR, -5, GetDate()) AND
TKR IN ('CSCO' , 'ABC')
GROPU BY RecDate
ORDER BY RecDate;