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