【发布时间】:2015-07-09 16:37:12
【问题描述】:
我想改变我的以下存储过程
ALTER Procedure [dbo].[spEGCRedemptionReportForMHR]
@DateTo datetime,
@DateFrom datetime,
@MerchantID varchar(11),
@Pan varchar(16)
As
Set @DateTo = @DateTo +1
Select Distinct
Convert(varchar(50),pt.TransactionDate,103) 'TransactionDate',
m.MerchantName1 MerchantName,
m.MerchantAddress Location,
m.MerchantID,
pt.TerminalID,
pt.batchnumber 'Batch #',
pt.SequenceNumber 'Receipt #',
pt.PAN 'Card Number',
c.EmbossName 'Card Holder Name',
Convert(Decimal(10,2),Case when pt.TransactionTypeID=2 then (pt.TotalAmount) end) As 'Points Redeemed',
Convert(Decimal(10,2),Case when pt.TransactionTypeID=2 then (((pt.TotalAmount)/(cc.usdconversionrate))/2) end) as 'Total Payment Amount (AED)', --/cc.USDConversionRate end) As 'Total Amount in AED',
Convert(Decimal(10,2),Case when pt.TransactionTypeID=2 then (((pt.TotalAmount)/(cc.usdconversionrate))/2) -15 end) as 'Total loaded Amount (AED)',
3.00 as 'Procco Share',
Convert(Decimal(10,2),Case when pt.TransactionTypeID=2 then (((pt.TotalAmount)/(cc.usdconversionrate))/2) - 3 end) as 'Settlement Amount'
from POS_Transactions pt
inner join Terminal t on t.TerminalID=pt.TerminalID
inner join Merchant m on m.MerchantID=t.MerchantID
inner join Card c on c.EmbossLine=pt.PAN
inner join Share s on s.MerchantID=m.MerchantID,Currency cc
where IsEmaar =1 and
cc.CurrencyCode='AED'
--and m.isemaarmerchant = 1
and (m.MerchantID=@MerchantID or @MerchantID='-999')
and (pt.TransactionDate>=@datefrom and pt.TransactionDate<=@dateto)
and (pt.PAN=@Pan or @Pan ='-999')
order by pt.TransactionDate
但每次我尝试执行它都会引发错误
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
我已经在我的选择中使用了pt.TransactionDate,但它仍然要求我包含它,因为它在我的 order by 子句中。我的查询可能有什么问题?
【问题讨论】:
-
您应该在选择中直接使用
order by Convert(varchar(50),pt.TransactionDate,103)或pt.TransactionDate
标签: sql-server select sql-order-by distinct