Tsql 如何根据凭证进行排序';包含连字符的编号,如SI-18-08-1、CRV-18-09-1
我想按凭证的升序对该方进行排序 还没试过Tsql 如何根据凭证进行排序';包含连字符的编号,如SI-18-08-1、CRV-18-09-1,tsql,Tsql,我想按凭证的升序对该方进行排序 还没试过 select * from (select v.VoucherDate, case when v.VoucherNo like 'SI%' then 'a' else 'b' end as [Type] ,v.Particular ,v.VoucherNo,isnull((at.Debit),0) as Debit ,isnull((at.Credit),0) as Credi
select *
from
(select v.VoucherDate,
case
when v.VoucherNo like 'SI%' then 'a'
else 'b'
end as [Type]
,v.Particular
,v.VoucherNo,isnull((at.Debit),0) as Debit
,isnull((at.Credit),0) as Credit
from Vouchers v
left join
(select
at.VoucherId
,at.PartyId
,isnull(SUM(at.DebitAmount),0) as Debit
,isnull(sum(at.CreditAmount),0) as Credit
from AccountsTransaction at
where at.PartyId=5106
group by at.VoucherId,at.PartyId
) at on at.VoucherId=v.VoucherId
where at.PartyId=5106
) as Temptbale
order by Temptbale.VoucherDate
如果
voucheno
始终包含4个部分,用破折号分隔(不包含任何点),我将使用PARSENAME
将其拆分,并按每个组件排序:
DECLARE @Vouchers TABLE (VoucherNo VARCHAR(30) PRIMARY KEY)
INSERT INTO @Vouchers (VoucherNo)
VALUES ('SI-18-08-1'),('CRV-18-09-1')
SELECT *
FROM @Vouchers
ORDER BY PARSENAME(REPLACE(VoucherNo,'-','.'),4),
PARSENAME(REPLACE(VoucherNo,'-','.'),3),
PARSENAME(REPLACE(VoucherNo,'-','.'),2),
PARSENAME(REPLACE(VoucherNo,'-','.'),1)
样本数据最好作为+。请将您的问题包括在内,您当前的尝试和您想要的结果。有关更多详细信息,…每个部分的长度将不超过当前为128个字符的
sysname
。