[c#]我如何抓住只有最新的发票编号

标签: Linq SQLServer C#
发布时间: 2017/2/26 16:40:20
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有存储为 nvarchar(25) 的发票编号。

其格式是 ' # # #AA' 在哪里 # # # 是发票编号和 AA 是版本号 (部分定单发货) 我不能更改的格式。

我创建了两个标量函数︰

CREATE FUNCTION [dbo].[fnNumbersFromStr](@str varchar(8000))
RETURNS int
AS
BEGIN
  WHILE PATINDEX('%[^0-9]%',@str)> 0
  SET @str = REPLACE(@str, SUBSTRING(@str, PATINDEX('%[^0-9]%', @str), 1), '')
  RETURN CAST(@str AS INT)
END

和它的兄弟︰

CREATE FUNCTION [dbo].[fnStringFromNum](@str varchar(25))
RETURNS varchar(25)
AS
BEGIN
  WHILE PATINDEX('%[^a-z]%',@str)> 0
  SET @str = REPLACE(@str, SUBSTRING(@str, PATINDEX('%[^a-z]%', @str), 1), '')
  RETURN @str
END

我被停滞与此脚本︰

SELECT
strInvoiceNo,
    dbo.fnNumbersFromStr(strInvoiceNo) AS [InvoiceNumber],
    dbo.fnStringFromNum(strInvoiceNo) AS [InvoiceString]
FROM @TempTable

当运行返回︰

strInvoiceNo    InvoiceNumber    InvoiceString
1000A 1000年 A
1000B 1000年 B
1000 C 1000年 C
1001A 1001年 A
1001B 1001年 B
1002AA 1002年 AA
1002AB 1002年 AB
1003A 1003年 A
1004A 1004年 A

我只是找不出下一步从这里。我被困。

我想选择只返回最新的发票版本︰

1000 C
1001B
1002AB
1003A
1004A

Sql,Lamda 或 Linq 将我做工精细。

提前谢谢,

解决方法 1:

试试这个︰

SELECT
  InvoiceNumber + MAX(InvoiceString) As strInvoiceNo    
FROM
(
   SELECT
       dbo.fnNumbersFromStr(strInvoiceNo) AS [InvoiceNumber],
       dbo.fnStringFromNum(strInvoiceNo) AS [InvoiceString]
   FROM @TempTable
) As tbl
GROUP BY InvoiceNumber
官方微信
官方QQ群
31647020