用于将列分隔为单独列的SQL查询

时间:2013-01-30 00:56:50

标签: sql dataframe

我想为H和T的价格设置单独的列,以'期间'作为共同指数。关于我应该怎么做的任何建议?

这是我的SQL查询目前产生的内容:

enter image description here

4 个答案:

答案 0 :(得分:3)

您可以使用GROUP BY和条件,如下所示:

SELECT
    period
,   SUM(CASE NAME WHEN 'H' THEN price ELSE 0 END) as HPrice
,   SUM(CASE NAME WHEN 'T' THEN price ELSE 0 END) as TPrice
FROM MyTable
GROUP BY period

答案 1 :(得分:3)

您可以执行以下操作:

SELECT period, 
    max(CASE WHEN name = 'H' THEN price END) as h_price,
    max(CASE WHEN name = 'T' THEN price END) as t_price
FROM myTable
GROUP by period

答案 2 :(得分:1)

如果您想重新创建表格?

1)创建一个包含列的新表:period,price_h& price_t。

2)将句点中的所有(不同)复制到新表的句号中。

3)将name = H的所有价格复制到新表格的price_h加入期间栏

4)对price_t ....重复3次。

祝你好运!

答案 3 :(得分:1)

游戏稍迟一点,但你也可以转动数据。

让我们创建一个样本表。

CREATE TABLE myData(period int, price decimal(12,4), name varchar(10))
GO
-- Inserting Data into Table

INSERT INTO myData
(period, price, name)
VALUES
(1, 53.0450, 'H'),
(1, 55.7445, 'T'),
(2, 61.2827, 'H'),
(2, 66.0544, 'T'),
(3, 61.3405, 'H'),
(3, 66.0327, 'T');

现在执行带有枢轴的选择。

SELECT period, H, T
FROM (
SELECT period, price, name
FROM myData) d
PIVOT (SUM(price) FOR name IN (H, T)) AS pvt
ORDER BY period

当我需要构建一个动态的sql脚本时,我已经使用了这种技术,该脚本接收了将在表头上显示的列。不需要案例陈述。

我不确定案例和枢轴的表现。也许拥有更多经验的人可以添加一些评论,以提高性能。