sql - SQL Server 中的 Case 语句

标签 sql sql-server case

我正在学习 SQL case 语句,并有以下存储过程

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  

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

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'

在您的语法中,您创建了两种不同的情况,导致选择两列,两者的名称相同。
上面的例子可以将两个不同的值返回到一行中。

关于sql - SQL Server 中的 Case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30343572/

相关文章:

html - 在 SQL Server 中存储 HTML

c# - 将大量记录写入通过 C# 中的存储过程返回的平面文件

带计数和大小写语句的SQL查询

sql - 比较日期然后插入数据

sql - Mssql如何选择前10行的SUM

sql - 在 MySQL 中检索日期格式行

sql-server - 使用 SQLCMD.EXE 导出 CSV 数据

sql - jooq 中的 CASE 语句?

mysql - SQL case 语句 - 多个条件

sql - select xxx from table1,table2 的显式语法