Tsql T-SQL列中的几个顶级数字
我在SQL Server 2016中有一个名为_Invoice的表,如下所示: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
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