正如你不能改變數據結構,你不得不擁有大量的CASE語句...
UPDATE
yourTable
SET
H00 = CASE m_hour WHEN 00 THEN H01 ELSE H00 END,
H01 = CASE m_hour WHEN 00 THEN H00 WHEN 01 THEN H02 ELSE H01 END,
H02 = CASE m_hour WHEN 01 THEN H01 WHEN 02 THEN H03 ELSE H02 END,
H03 = CASE m_hour WHEN 02 THEN H02 WHEN 03 THEN H04 ELSE H03 END,
...
H23 = CASE m_hour WHEN 22 THEN H22 WHEN 23 THEN ??? ELSE H23 END
FROM
(
SELECT
primary_key,
CASE WHEN H00 = 'M' THEN 00
WHEN H01 = 'M' THEN 01
...
END AS m_hour
FROM
yourTable
)
AS lookup
WHERE
lookup.primary_key = yourTable.primary_key
你可以做這樣的事情,而不是縮短子查詢CASE:
CHARINDEX('M', H00 + H01 + H02 + ... + H23, 0) - 1 AS m_hour
但是,這也會增加一些CPU負載作爲縮短代碼的價格,並沒有擺脫UPDATE中的24個CASE語句。
將您的數據結構更改爲有24行數據而不是24列。像***這樣的分析查詢將會變得更快更簡單。 *(保留現有的結構或者需要編寫一個查詢來暫時將其轉換爲多行,或者編寫一套非常長的CASE語句。)* – MatBailie
感謝您的評論,遺憾的是,這對於此數據集是不可能的現有系統)。我從字面上「卡住」當前的模式。你認爲這是一個更好的主意,轉移數據,找到M,然後不透明嗎?還是應該使用案例陳述方法? – Simon
我喜歡pivot - update - unpivot的想法。我有興趣看到這種情況和案例之間的表現差異。 –