我想为 H 和 T 的价格设置单独的列,以“句点”作为通用索引。关于我应该如何解决这个问题的任何建议?
这是我的 SQL 查询目前产生的结果:
您可以使用GROUP BY
and 条件,如下所示:
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
您可以执行以下操作:
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
如果您的意思是重新创建表?
1) 创建一个包含列的新表:period、price_h 和 price_t。
2)将所有(不同的)从周期复制到新表的周期。
3) 将 name = H 的所有价格复制到新表的 price_h 加入期间列
4) 对 price_t 重复 3....
祝你好运!
对此游戏有点晚了,但您也可以旋转数据。
让我们创建一个示例表。
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 脚本来获取将在表头上显示的列时,我使用了这种技术。不需要案例陈述。
我不确定机箱和支点的性能。也许有更多经验的人可以添加一些评论,以提供更好的性能。