如果您要查看上面的圖像,我需要更新此表中TID的空值,該值是表中第三列的值,其中兩行之間的值實際上具有值。
所以在上面的例子中,我需要將行44-57設置爲040,將行60-87設置爲077等。可以使用的一種模式是列2在字符串中具有INS,這表示值在第3列中將被改變。所以我正在考慮以某種方式使用DATA LIKE'INS%'。
請讓我知道你對這個問題和任何可能的解決方案的看法。
謝謝!
如果您要查看上面的圖像,我需要更新此表中TID的空值,該值是表中第三列的值,其中兩行之間的值實際上具有值。
所以在上面的例子中,我需要將行44-57設置爲040,將行60-87設置爲077等。可以使用的一種模式是列2在字符串中具有INS,這表示值在第3列中將被改變。所以我正在考慮以某種方式使用DATA LIKE'INS%'。
請讓我知道你對這個問題和任何可能的解決方案的看法。
謝謝!
DECLARE @x TABLE
(Column1 INT, Column2 VARCHAR(64), TID VARCHAR(10));
INSERT @x VALUES
(42, 'INS{whatever}', '040'),
(43, 'somethingelse', '040'),
(44, 'somethingelse', NULL),
(45, 'somethingelse', NULL),
(46, 'somethingelse', NULL),
(47, 'somethingelse', NULL),
(48, 'somethingelse', NULL),
(49, 'INS{whatever}', '077'),
(50, 'somethingelse', '077'),
(51, 'somethingelse', NULL),
(52, 'somethingelse', NULL);
;WITH x AS (SELECT i = Column1, TID, rn = ROW_NUMBER() OVER (ORDER BY Column1)
FROM @x WHERE Column2 LIKE 'INS%'
),
y AS (SELECT x.TID, s = x.i, e = COALESCE(x2.i, 2000000000)
FROM x LEFT OUTER JOIN x AS x2 ON x.rn = x2.rn -1
)
UPDATE src SET TID = y.TID
FROM @x AS src
INNER JOIN y ON src.Column1 > y.s AND src.Column1 < y.e;
SELECT * FROM @x;
它的工作原理。該死的!你們好棒。太神奇了...... – OBL 2012-02-28 19:21:26
請你解釋一下邏輯。我正在嘗試爲另一個問題做類似的事情。 謝謝! – OBL 2012-02-29 19:33:42
第一個cte(x)取值爲Column2 ='INS
這假定:
替換你的表和列名,並檢查是否有輕微的錯別字。
UPDATE MyTable
set Col3 = mt2.Col3
from MyTable mt
inner join (-- Get the "earlier" Col3 value for each row that has no value
select t1.Col1, max(t2.Col1) EarlierValueHere
from MyTable t1
inner join MyTable t2
on t2.Col1 < t1.Col1
and t2.Col3 is not null
group by t1.Col1
where t1.Col3 is null) earlier
on earlier.Col1 = mt.Col1
inner join MyTable mt2
on mt2.Col1 = earlier.EarlierValueHere
嘗試這些。該死的!你們好棒。太神奇了...... – OBL 2012-02-28 19:07:38
另一個查詢您可以使用:
update t set TID = X.NonNullTID
from [YourTable] t
join
(select
t1.Column1, t1.Column2, t1.TID,
(select top 1 tid from [YourTable]
where TID is not null and Column1 <= t1.Column1
order by Column1 desc) as NonNullTID
from [YourTable] t1) X
on X.Column1 = t.Column1
的
可能重複[SQL複雜的邏輯(http://stackoverflow.com/questions/9473835/sql-complex-logic) – 2012-02-28 23:24:26