不幸的是,我一直堅持這個項目的方式。我需要做的是拿一張大約有100個字段的表格,比較兩個記錄,確定哪些字段不匹配。SQL Server數據透視/不透視整個表格(100+個字段)
我能想到的是轉動他們的最好辦法,所以這個:
KeyID Field1 Field2 Field3 Field4 Field5 Field6
42 Apples Pears Blue Hills Dog iPhone
65 Apples Plums Red Hills Cat iPhone
變成這樣:
FieldName KeyID_42 KeyID_65
Field1 Apples Apples
Field2 Pears Plums
Field3 Blue Red
Field4 Hills Hills
Field5 Dog Cat
Field6 iPhone iPhone
,然後我可以運行對像的查詢:
我應該留下這個:
FieldName KeyID_42 KeyID_65
Field2 Pears Plums
Field3 Blue Red
Field5 Dog Cat
但是,對於包含100個左右字段的表格,在PIVOT語句中列出它們中的每一個都不會很漂亮。我可能不得不在稍後的另一張桌子上做這個。
有沒有簡單的方法來實現這一目標?一個不需要單獨列出每個字段?
編輯:
我在這一點上,但越來越多的錯誤是這樣的:Invalid column name 'UpdateTime'.
我正在使用的代碼是這樣的:
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot
= stuff((select ','+quotename(C.name)
FROM sys.columns c
WHERE c.object_id = OBJECT_ID('dbo.tblSQLAdminInventory')
--AND C.Name <> 'EffectiveDate'
for xml path('')), 1, 1, '')
set @query
= 'select KeyID, ID1, ID2
from tblSQLAdminInventory
unpivot
(
KeyID
for ID1 in ('+ @colsunpivot +')
) u
unpivot
(
KeyID
for ID2 in ('+ @colsunpivot +')
) u
'
exec sp_executesql @query;
沒有列出所有領域,你需要使用'動態sql'去解決你的結果。 SO的幾個例子就是這樣做的。 – sgeddes
Double unpivot不會訣竅。爲什麼不轉光兩次? –
Where子句總是WHERE KeyID_42 <> KeyID_65,或者這也需要動態化嗎? –