SQL 服务器中的案例陈述

Case Statement in SQL Server

我正在学习 SQL case 语句并且有以下 stored procedure

Select PT.[ID] 'TransactionID', PT.BatchNumber, PT.SequenceNumber, PT.TransactionDate,  
PT.TerminalID, PT.TotalAmount, PT.TransactionTypeID, TT.TransactionType,   
PT.PAN 'EmbossLine',PT.PreBalanceAmount, PT.PostBalanceAmount, RefTxnID, SettlementDate,PaidCash, CreditAmount, DiscountAmount,  
RefPAN, Remarks, PT.Product,
case PT.Product when 1 then 'Taxi' end 'ProductName'
case PT.Product when 2 then 'Airport Lounge' end 'ProductName'
into #Temp  
from POS_Transactions PT inner join TransactionType TT on TT.TransactionTypeID = PT.TransactionTypeID  
where   
PT.[ID] not in (Select distinct isnull(TransactionID,0) from Testcards)  
and (PT.TransactionDate >= @DateFrom)  
and (PT.TransactionDate < @DateTo)  
and (PT.TransactionTypeID = @TransactionTypeID or @TransactionTypeID = -999)  


select T.*,  C.EmbossLine+'&nbsp;' as 'EmbossLine',  C.EmbossLine as 'EmbossLine1',  
C.EmbossName, PM.MerchantID, PM.MerchantName1, C.AccountNumber, C.VehicleNumber  
from #Temp T   
inner join Card C on C.EmbossLine= T.EmbossLine  
inner join Terminal on Terminal.TerminalID = T.TerminalID  
inner join Merchant PM on  PM.MerchantID = Terminal.MerchantID  
where C.Status <>'E3'  
and C.CardID not in (Select distinct isnull(CardID,0) from Testcards)  
and (PM.MerchantID =@MerchantID or @MerchantID='-999')  
and (C.EmbossLine like '%'+@EmbossLine+'%' or @EmbossLine like '-999')  
and (C.EmbossName like '%'+@EmbossName+'%' or @EmbossName like '-999')  
order by T.TransactionDate, MerchantName1, T.BatchNumber, T.SequenceNumber  


drop table #Temp  

当我create它时,命令执行成功。但是当我调用它时,它会抛出以下错误

Column names in each table must be unique. Column name 'ProductName' in table '#Temp' is specified more than once.

我认为这些行的语法有问题

case PT.Product when 1 then 'Taxi' end 'ProductName'
case PT.Product when 2 then 'Airport Lounge' end 'ProductName'

有人能认出来吗?

你的线路确实有问题
我怀疑你在寻找类似的东西:

case PT.Product 
        when 1 then 'Taxi'
        when 2 then 'Airport Lounge' 
end 'ProductName'

在您的语法中,您使用了两种不同的情况,导致选择了两列,它们的名称相同。
以上情况可以return两个不同的值排成一行。