Tsql T-SQL列中的几个顶级数字

Tsql T-SQL列中的几个顶级数字,tsql,sql-server-2016,Tsql,Sql Server 2016,我在SQL Server 2016中有一个名为_Invoice的表,如下所示: Company InvoiceNo ----------------- 10 1 10 2 10 3 20 1 20 2 20 3 20 4 我想从所有公司获得最高的价值 像这样: Company InvoiceNo ----------------- 10 3 20 3 我希望这些数据随后更新另一个名为InvoiceSer

我在SQL Server 2016中有一个名为_Invoice的表,如下所示:

Company InvoiceNo
-----------------
10      1
10      2
10      3
20      1
20      2
20      3
20      4
我想从所有公司获得最高的价值

像这样:

Company InvoiceNo
-----------------
10      3
20      3
我希望这些数据随后更新另一个名为InvoiceSeries的表 其中InvoiceNo高于InvoiceSeries表中的NextNo

我一直在从InvoiceNo获取最高数据:

一些示例数据:

Columns in InvoiceSeries    Columns in _Invoices    
    Company NextNo          Company         InvoiceNo
    10      9007            10              9008
    20      1001            10              9009
                            10              9010
                            10              9011
                            10              9012
                            20              1002
                            20              1003
                            20              1004

如果我理解正确,您正在寻找最高通用发票号

范例

返回

编辑-更新以供评论


如果我理解正确,您正在寻找最高通用发票号

范例

返回

编辑-更新以供评论


此答案假设发票系列表中有一条记录

--Insert Sample Data
CREATE TABLE #_Invoice (Company INT, InvoiceNo INT)

INSERT INTO #_Invoice(Company, InvoiceNo)
VALUES 
    (10 , 1),
    (10 , 2),
    (10 , 3),
    (20 , 1),
    (20 , 2),
    (20 , 3),
    (20 , 4)

CREATE TABLE #InvoiceSeries(Company INT, NextNo INT)

INSERT INTO  #InvoiceSeries(Company, NextNo)
VALUES  
    (10, 1),
    (20 ,1)

UPDATE      s
SET         NextNo = MaxInvoiceNo
FROM        #InvoiceSeries s
INNER JOIN  (
    --Get the Max invoice number per company
    SELECT      Company, MAX(InvoiceNo) as MaxInvoiceNo
    FROM        #_Invoice
    GROUP BY    Company
) i on i.Company = s.Company
AND     s.NextNo < i.MaxInvoiceNo --Only join to records where the 'nextno' is less than the max

--Confirm results
SELECT * FROM #InvoiceSeries

DROP TABLE #InvoiceSeries
DROP TABLE #_Invoice

此答案假设发票系列表中有一条记录

--Insert Sample Data
CREATE TABLE #_Invoice (Company INT, InvoiceNo INT)

INSERT INTO #_Invoice(Company, InvoiceNo)
VALUES 
    (10 , 1),
    (10 , 2),
    (10 , 3),
    (20 , 1),
    (20 , 2),
    (20 , 3),
    (20 , 4)

CREATE TABLE #InvoiceSeries(Company INT, NextNo INT)

INSERT INTO  #InvoiceSeries(Company, NextNo)
VALUES  
    (10, 1),
    (20 ,1)

UPDATE      s
SET         NextNo = MaxInvoiceNo
FROM        #InvoiceSeries s
INNER JOIN  (
    --Get the Max invoice number per company
    SELECT      Company, MAX(InvoiceNo) as MaxInvoiceNo
    FROM        #_Invoice
    GROUP BY    Company
) i on i.Company = s.Company
AND     s.NextNo < i.MaxInvoiceNo --Only join to records where the 'nextno' is less than the max

--Confirm results
SELECT * FROM #InvoiceSeries

DROP TABLE #InvoiceSeries
DROP TABLE #_Invoice

我希望每个公司的发票编号最高,因此输出应为公司10发票编号3、公司20和发票编号4@Rubiano然后,一个简单的max应该执行以下操作:按公司从表中选择公司,Invoice=maxinvoiceno。Select语句有效。按公司从发票组中选择公司,maxinvoiceno作为“InvoiceNo”。但我也希望在更新语句中使用它。我在BEGIN TRAN Update INVOICESERIALES SET NextNo=选择公司,MAXInvoiceNo作为“InvoiceNo”从_InvoiceGroup BY Company从InvoiceSeries ise JOIN开始_InvoiceI在ise上。InvoiceSeries=i.InvoiceSeries,其中i.InvoiceNo>ise.NextNob,但我得到以下错误:当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式。我希望每个公司都有最高的InvoiceNo输出应为公司10发票编号3、公司20和发票编号4@Rubiano然后,一个简单的max应该执行以下操作:按公司从表中选择公司,Invoice=maxinvoiceno。Select语句有效。按公司从发票组中选择公司,maxinvoiceno作为“InvoiceNo”。但我也希望在更新语句中使用它。我在BEGIN TRAN Update INVOICESERIALES SET NextNo=选择公司,MAXInvoiceNo作为“InvoiceNo”从_InvoiceGroup BY Company从InvoiceSeries ise JOIN开始_InvoiceI在ise上。InvoiceSeries=i.InvoiceSeries,其中i.InvoiceNo>ise.NextNob,但我得到以下错误:当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式。示例数据包括Company=20,发票编号=4。但是,所有公司表中的最高值返回Company=20,InvoiceNo=3。这是故意的还是错误的?您的示例数据包括Company=20,InvoiceNo=4。但是,所有公司表中的最高值返回Company=20,InvoiceNo=3。这是故意的还是错误的?
Company  InvoiceNo
10       3
20       3
Select company
      ,Invoice=max(invoiceno) 
 From  YourTable 
Group By company
--Insert Sample Data
CREATE TABLE #_Invoice (Company INT, InvoiceNo INT)

INSERT INTO #_Invoice(Company, InvoiceNo)
VALUES 
    (10 , 1),
    (10 , 2),
    (10 , 3),
    (20 , 1),
    (20 , 2),
    (20 , 3),
    (20 , 4)

CREATE TABLE #InvoiceSeries(Company INT, NextNo INT)

INSERT INTO  #InvoiceSeries(Company, NextNo)
VALUES  
    (10, 1),
    (20 ,1)

UPDATE      s
SET         NextNo = MaxInvoiceNo
FROM        #InvoiceSeries s
INNER JOIN  (
    --Get the Max invoice number per company
    SELECT      Company, MAX(InvoiceNo) as MaxInvoiceNo
    FROM        #_Invoice
    GROUP BY    Company
) i on i.Company = s.Company
AND     s.NextNo < i.MaxInvoiceNo --Only join to records where the 'nextno' is less than the max

--Confirm results
SELECT * FROM #InvoiceSeries

DROP TABLE #InvoiceSeries
DROP TABLE #_Invoice