删除行值并转换为单列值

时间:2019-04-12 19:29:24

标签: sql sql-server stored-procedures

我有一个存储过程,返回的表如下:

ID | Type | Price | Description
-------------------------------
7  | J    | 50.00 | Job
7  | F    | 20.00 | Freight
7  | P    | 30.00 | Postage
7  | H    |  5.00 | Handling

我希望它返回这样的表:

ID | Type | Price | Description | FreightPrice
-----------------------------------------
7  | J    | 50.00 | Job         | 20.00
7  | P    | 30.00 | Postage     | 20.00
7  | H    |  5.00 | Handling    | 20.00

有没有一种方法可以使用查询,例如:

SELECT * FROM Temp WHERE Type = 'F'

但是将“运费”行作为一列返回,而不是仅包含“价格”值?

从我所看到的情况来看,我可能需要PIVOT运算符来实现此目标,但这似乎过于复杂。有没有一种方法可以使用CASE或IF表达式达到此结果?

2 个答案:

答案 0 :(得分:2)

根据您提供的数据,有一行具有描述值:“运费”。假设是这种情况,请尝试:

select ID,Type,Price,Description,
       FreightPrice = (select Price 
                       from mytable 
                       where Description = 'Freight')
from mytable
where Description <> 'Freight'

答案 1 :(得分:1)

如果Freight行始终向右移动,则可以对该逻辑进行硬编码(假设它始终是单行),如下所示:

select
  id,
  type,
  price,
  description,
  (select price from t where description = 'Freight') as freightprice
from t
where description <> 'Freight'

注意:如果您的表中有Freight的一行以上,则此查询将崩溃。