2016-01-13 30 views
0

我試圖讓我的SQL語句:A.查看TrackingNumber列中的值是否包含A'B',B僅取'B'前面的數字,C.將原始行的COST列添加到行的COST,其中來自B的值=新行的出貨編號和D 。刪除舊的行。我不知道從哪裏開始,但我可能需要一個CASE語句。以下是具有預期結果的示例表。我將如何去做這樣的任務?我知道「CASE when TrackingNumber = 1B4 THEN Do something」,但是這樣做是爲了從我的select語句中增加和減少和刪除行嗎?使用SQL case語句查找所有具有'B'的值,然後保留'B'前面的所有數字

|ShipmentNumber|COST|TrackingNumber| 
|1    |20 |154   | 
|2    |30 |1B3   | 
|3    |10 |1B4   | 
|4    |40 |567   | 

所以我的新的結果應該是

|ShipmentNumber|COST|TrackingNumber| 
|1    |60 |154   | 
|4    |40 |567   | 
+0

如果字母可以位於跟蹤號碼B的前面,那麼裝運號碼也可以是一個字母,因爲您試圖將它們匹配起來? – JamieD77

+3

所以你的問題是?我沒有看到問題,只是一個需求清單。這個網站是用於編程的問題,而不是一個你可以轉儲需求的工作板,並期望別人爲你做你的工作...... –

+0

使用charindex()找到B.使用left()獲取B之前的值。計算新的ShipmentNumber和TrackingNumber的情況。使用聚合查詢來合併行。 – Rabbit

回答

1

如何做一個join?對於您所提供的數據和描述,我認爲下面是一個很值得你想要什麼:

select t1.ShipmentNumber, max(t1.COST) + coalesce(sum(t2.COST)), t1.trackingnumber 
from t t1 left join 
    t t2 
    on t2.trackingnumber like t1.ShipmentNumber + 'B%' 
where t1.trackingnumber not like '%B%' 
group by t1.ShipmentNumber, t1.trackingnumber; 
0

下選擇將讓你在跟蹤號碼包含一個「B」的所有行:

Select * From tableName Where TrackingNumber Like '%B%' And TrackingNumber NOT Like 'B%' 
+0

作爲選擇的一部分,使用charindex,如上面所建議的那樣,只將你想要的部分提取到新字段中。這應該讓你開始... – PKatona

相關問題