使用SQL case语句查找具有' B'的所有值。然后将所有数字保存在' B'前面。

时间:2016-01-13 19:07:47

标签: sql sql-server

我正在尝试将我的SQL语句转到:A。查看TrackingNumber列中的值是否包含' B',B。仅取出' B&#39前面的数字;,C。将原始行的COST列添加到行的COST中,其中值为B. =新行的出货编号,D。删除旧行。我不知道从哪里开始,除了我可能需要一个CASE语句。下面是一个包含预期结果的示例表。我怎么去做这样的任务?我知道" CASE当TrackingNumber = 1B4然后做某事"但这是否适用于在select语句中添加,减去和删除行?

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

所以我的新结果应该是

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

以下选项将为您提供跟踪号包含“B”的所有行:

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