我需要一些幫助來在 SQL Server 中透視我的資料。我已經嘗試了幾個在線 PIVOT,但它們要么用于靜態值,要么以某種方式聚合我不想要的資料。理想情況下,我想根據專案 ID 回傳資料并將其翻轉,以便我可以以不同的方式呈現。
我當前的表存盤這樣的資料:
| 專案編號 | 預計月份 | 勞工 | 設備 |
|---|---|---|---|
| 1 | 2021-09-01 | 500 | 0 |
| 1 | 2021-10-01 | 250 | 250 |
| 1 | 2021-11-01 | 100 | 50 |
| 2 | 2021-11-01 | 100 | 50 |
| 2 | 2021-12-01 | 100 | 50 |
選擇 Project Id = 1 時我想要的輸出是:
| 2021-09-01 | 2021-10-01 | 2021-11-01 | |
|---|---|---|---|
| 勞工 | 500 | 250 | 100 |
| 設備 | 0 | 250 | 50 |
選擇 Project Id = 2 時我想要的輸出是:
| 2021-11-01 | 2021-12-01 | |
|---|---|---|
| 勞工 | 100 | 50 |
| 設備 | 100 | 50 |
任何幫助/鏈接將不勝感激。
uj5u.com熱心網友回復:
這是一個非常自定義的要求,您沒有找到適合您的確切需求的現成樣本進行復制和粘貼,我并不感到驚訝。
您可以查看以前解決方案的后期修訂,但我認為這是我最喜歡的:
CREATE PROCEDURE dbo.DoThePivotThing
@ProjectId int
AS
BEGIN
DECLARE @cols nvarchar(max),
@agg nvarchar(max),
@sql nvarchar(max);
SELECT @cols = STUFF((SELECT ',
' QUOTENAME([Projected Month])
FROM dbo.Projects WHERE [Project Id] = @ProjectId
FOR XML PATH(''), TYPE).value
(N'./text()[1]', N'nvarchar(max)'),1,1,'');
SELECT @agg = STUFF((SELECT ',
' QUOTENAME([Projected Month])
' = MAX(' QUOTENAME([Projected Month]) N')'
FROM dbo.Projects WHERE [Project Id] = @ProjectId
FOR XML PATH(''), TYPE).value
(N'./text()[1]', N'nvarchar(max)'),1,1,'');
SET @sql = N';WITH x AS (
SELECT * FROM dbo.Projects
CROSS APPLY (VALUES(1,''Labor'',Labor),
(2,''Equipment'',Equipment)) AS v(o,t,v)
PIVOT (MAX(v) FOR [Projected Month]
IN (' @cols ')
) AS piv
)
SELECT Cost = t, ' @agg N' FROM x GROUP BY t,o ORDER BY o;';
EXEC sys.sp_executesql @sql, N'@ProjectId int', @ProjectId;
END
EXEC dbo.DoThePivotThing @ProjectId = 1;
| 成本 | 2021-09-01 | 2021-10-01 | 2021-11-01 |
|---|---|---|---|
| 勞工 | 500 | 250 | 100 |
| 設備 | 0 | 250 | 50 |
EXEC dbo.DoThePivotThing @ProjectId = 2;
| 成本 | 2021-11-01 | 2021-12-01 |
|---|---|---|
| 勞工 | 100 | 100 |
| 設備 | 50 | 50 |
- 示例

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/332833.html標籤:sql sql-server 查询语句
上一篇:將Coalman更新為重復項
