簡體   English   中英

SQL查詢將一列分隔為多個單獨的列

[英]SQL query to separate a column into separate columns

我想在H和T的價格中有單獨的列,以“期間”作為通用指數。 關於我應該如何處理的任何建議?

這是我的SQL查詢目前產生的結果:

在此處輸入圖片說明

您可以使用GROUP BY和條件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

您可以執行以下操作:

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)將名稱= 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腳本,該腳本采用將在表標題中顯示的列時,就使用了這種技術。 無需案例說明。

我不確定機殼和樞軸的性能。 也許有更多經驗的人可以添加一些評論,以獲得更好的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM