如果只想隱藏剩下的大多是原封不動,你可以這樣做(讓他們在相同的順序排序的列與他們行之間的差異,使重複與DISTINCT
被隱藏):
SELECT DISTINCT
t2.*
FROM
dbo.YourTable t
CROSS APPLY (
SELECT t.ColA, t.ColB, t.ColC, t.ColD WHERE t.ColA <= t.ColB
-- Note: this next SELECT has the columns in a different order!
UNION ALL SELECT t.ColB, t.ColA, t.ColD, t.ColC WHERE t.ColA > t.ColB
) t2
;
這將無法正常工作,如果ColA
或ColB
可以有NULL
值。
但似乎你想要做一個多列unpivot,其中ColA和ColC的關係與ColB和ColC沒有任何特別的關係(除了可能包含的一些關鍵列)是這樣的:
SELECT -- can do DISTINCT if you remove the Type column
c.Type,
c.Code,
c.Value
FROM
dbo.YourTable t
CROSS APPLY (
SELECT 'ColA', t.ColA, t.ColC
UNION ALL SELECT 'ColB', t.ColB, t.ColD
) c (Type, Code, Value)
;
您不必放在Type
列,但我認爲這將是有益的給你看如何增加它可以幫助保護您的數據的意義時,正確標準化。
沒有關於您的數據和您想要完成的更多信息,我無法提供更多指導。
我會認爲,如果您將多個獨立事件存儲在多個列中,那麼數據庫設計並不理想,需要進行規範化處理 - 這些數據應該存儲在行而不是列中,因爲我的第二個查詢會轉換數據至。
什麼是期望的輸出? – DarkKnight
這聽起來像你不想刪除_remove_,即刪除任何東西,也沒有涉及重複的行。你能否改寫標題是一個更準確的smidge? – HABO
你的編輯沒有意義。你想交換ColB和ColC的內容嗎? – ErikE