有沒有辦法在SQL Server 2008中的PIVOTed表上執行更新,其中的更改傳播回源表(假設沒有聚合)?SQL Server 2008中的PIVOTs更新
1
A
回答
1
這將如果轉動柱形成一個唯一的標識符只有真正發揮作用。那麼讓我們來看一下Buggy的例子。這裏是原來的表:
TaskID Date Hours
,我們希望把它轉動到看起來像這樣的表:
TaskID 11/15/1980 11/16/1980 11/17/1980 ... etc.
爲了創造支點,你會做這樣的事情:
DECLARE @FieldList NVARCHAR(MAX)
SELECT
@FieldList =
CASE WHEN @FieldList <> '' THEN
@FieldList + ', [' + [Date] + ']'
ELSE
'[' + [Date] + ']'
END
FROM
Tasks
DECLARE @PivotSQL NVARCHAR(MAX)
SET @PivotSQL =
'
SELECT
TaskID
, ' + @FieldList + '
INTO
##Pivoted
FROM
(
SELECT * FROM Tasks
) AS T
PIVOT
(
MAX(Hours) FOR T.[Date] IN (' + @FieldList + ')
) AS PVT
'
EXEC(@PivotSQL)
那麼你有你的樞軸表##Pivoted
。現在你執行一個更新時間字段中的一個:
UPDATE
##Pivoted
SET
[11/16/1980 00:00:00] = 10
WHERE
TaskID = 1234
現在##Pivoted
有對於發生在1980年11月16日任務的時間的更新版本,我們希望保存回到原來的表,所以我們使用UNPIVOT
:
DECLARE @UnPivotSQL NVarChar(MAX)
SET @UnPivotSQL =
'
SELECT
TaskID
, [Date]
, [Hours]
INTO
##UnPivoted
FROM
##Pivoted
UNPIVOT
(
Value FOR [Date] IN (' + @FieldList + ')
) AS UP
'
EXEC(@UnPivotSQL)
UPDATE
Tasks
SET
[Hours] = UP.[Hours]
FROM
Tasks T
INNER JOIN
##UnPivoted UP
ON
T.TaskID = UP.TaskID
你會發現,我修改了越野車的通過例如某一天的一週,除去聚集。這是因爲如果您執行任何類型的聚合,則不會返回並更新。如果我更新SUNHours字段,我如何知道我正在更新哪個星期日的小時?這隻會在沒有聚合的情況下起作用。我希望這有幫助!
0
這只是一個猜測,但是你可以將查詢變成視圖然後更新它嗎?
0
我不認爲這是可能的,但是如果您發佈關於您試圖解決的實際問題的具體情況,可能會給您一些關於處理它的不同方法的建議。
1
PIVOT
s在pivot子句中總是需要一個聚合函數。
因此總是存在聚合。
所以,不,它不能更新。
你可以把一個INSTEAD OF TRIGGER
基於語句中的視圖,從而可以使任何視圖更新。
例here
相關問題
- 1. 更新多行SQL Server 2008
- 2. sql server 2008更新select threadsafe?
- 3. 更新sql server 2008中的XML字段
- 4. SQL Server 2008中的更新列 - SSIS
- 5. ADO.NET更新SQL Server 2008中的表
- 6. 排除更新SQL Server 2008中的行
- 7. SQL Server 2008中的更新列
- 8. 案例中的SQL Server 2008更新
- 9. 在SQL Server 2008中撤消表更新
- 10. 在SQL Server 2008 R2中更新表
- 11. 更新SQL Server 2008中查看
- 12. 更新視圖 - SQL Server 2008中
- 13. SQL Server 2008 - 需要更新SQL幫助
- 14. 的SQL Server 2008:更新查詢
- 15. 如何更新vb.net 2013的SQL Server 2008
- 16. 更新的SQL Server 2008登錄SID
- 17. SQL Server 2008的XML更新ü
- 18. SQL Server 2008「行更新」時間戳
- 19. 從子查詢SQL Server 2008更新
- 20. SQL Server 2008用UDF更新VarChar列?
- 21. SQL Server 2008更新觸發器
- 22. 更新觸發器在SQL Server 2008
- 23. SQL Server 2008 - 多個更新與循環
- 24. C#和SQL Server 2008批處理更新
- 25. SQL Server 2008 - 更新臨時表
- 26. 更新時使用OUTPUT for SQL Server 2008?
- 27. SQL Server 2008:使用主鍵更新表
- 28. 更新觸發器SQL Server 2008
- 29. 更新一行在SQL Server 2008
- 30. SQL Server 2008中
這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2012-08-31 00:33:18
@ElVieejo,感謝您的剪貼評論。但是,我不同意你對我的回答的分析。 – 2012-08-31 12:53:21
不客氣。你問,而不是:) – 2012-08-31 13:02:55