我有一个存储过程,返回的表如下:
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表达式达到此结果?
答案 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
的一行以上,则此查询将崩溃。