ID列需要显示出与specilal值
问题描述:
我在这个表标识一个表测试列,FuelId和FuelDesc列there.values像下表,基于前三我需要创建列像下面的表,请帮助我得到。ID列需要显示出与specilal值
ID FuelID FuelDesc
100 01 Elec
101 02 Gas
102 02 Gas
100 02 Gas
101 01 Elec
103 01 Elec
O/P: -
ID Pamenttype
100 Both
101 Both
102 Gas
103 Elec
答
SELECT ID, CASE WHEN rowCount = 1 THEN FuelDesc ELSE 'Both' END AS Pamenttype
FROM
(SELECT ID, MAX(FuelDesc) AS FuelDesc, COUNT(*) AS rowCount
FROM mytable
GROUP BY ID)
答
可以使用CASE
表达,与COUNT
和MAX
功能的帮助:
SELECT
ID,
PaymentType = CASE WHEN COUNT(FuelId) > 1 THEN 'Both' ELSE MAX(FuelDESC) END
FROM test
GROUP BY ID
答
您可以定义Both
为有一个记录FuelID = '01'
和另一个机智h FuelID = '02'
。假设{ID,FuelID}在表测试独特:
with BothPaymentTypes as (
select t1.ID
from Test t1
join Test t2 on t1.ID = t2.ID
where t1.FuelID = '01'
and t2.FuelID = '02'
)
select ID, 'Both' as Pamenttype
from BothPaymentTypes
union all
select ID, FuelDesc
from Test
where ID not in (select ID from BothPaymentTypes)
或者,你能避免使用COUNT和HAVING子句中自联接 - 再次假设{ID, FuelID}是唯一的:
with BothPaymentTypes as (
select ID
from Test
group by ID
having count(*) = 2
)
select ID, 'Both' as Pamenttype
from BothPaymentTypes
union all
select ID, FuelDesc
from Test
where ID not in (select ID from BothPaymentTypes)
答
WITH fuelCount
AS
(
SELECT ID, COUNT(FuelID) AS fuelCount
FROM Test GROUP BY ID
)
SELECT fc.ID,
CASE
WHEN fc.fuelCount > 1 THEN 'BOTH'
ELSE (SELECT t.FuelDesc FROM Test t WHERE t.ID = fc.ID)
END AS Pamenttype
FROM fuelCount fc
你有试过什么吗?如果有的话,请分享。 – 1000111
'SELECT \t ID, \t PaymentType = CASE WHEN COUNT(DISTINCT FuelId)> 1 THEN '两者' ELSE MAX(FuelDESC)END FROM测试 GROUP BY ID' –