1

我想为 H 和 T 的价格设置单独的列,以“句点”作为通用索引。关于我应该如何解决这个问题的任何建议?

这是我的 SQL 查询目前产生的结果:

在此处输入图像描述

4

4 回答 4

3

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

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
于 2013-01-30T01:00:49.670 回答
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
于 2013-01-30T01:01:16.447 回答
1

如果您的意思是重新创建表?

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

2)将所有(不同的)从周期复制到新表的周期。

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

4) 对 price_t 重复 3....

祝你好运!

于 2013-01-30T01:06:00.897 回答
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 脚本来获取将在表头上显示的列时,我使用了这种技术。不需要案例陈述。

我不确定机箱和支点的性能。也许有更多经验的人可以添加一些评论,以提供更好的性能。

于 2013-01-30T01:21:22.697 回答