gpt4 book ai didi

sql-server - 是否有等效于 QlikView 的 AutoNumber() 的 SQL Server 函数?

转载 作者:行者123 更新时间:2023-12-02 01:03:24 28 4
gpt4 key购买 nike

首先:这不是一种 IDENTITY() 字段。

在 QlikView 中,它用于根据发送给函数的参数生成数字。请在此处查看其文档:https://help.qlik.com/en-US/qlikview/November2017/Subsystems/Client/Content/Scripting/CounterFunctions/autonumber.htm

简而言之,您向它发送一个参数,它返回一个整数,该整数将为脚本的其余部分标识相同的参数。如果你发送...

   AutoNumber('Name 900') -> returns 1
AutoNumber('Name 300') -> returns 2
AutoNumber('Name 001') -> returns 3
AutoNumber('Name 900') -> returns 1 ... again

并且因为该参数已经在AutoNumber的intern列表中

我试图在 SQL Server 中构建一些类似的东西,但不可能在标量函数中使用 SELECT。

我的需要是得到类似...

INSERT INTO FacSales (SumaryID, InvoiceID, InvoiceDate
, ProductID, SaleValue, CustomerID, VendorID)
SELECT AutoNumber(sale.VendorID, sale.CustomerID, sale.ProductID)
, sale.InvoiceID
, sale.SaleDate
, details.ProductID
, etc, etc, etc.

在 SQL Server 内部,是否有执行此操作的“ native ”函数?或者,有没有办法使用过程/函数来构建它?

谢谢。

最佳答案

你可以使用 DENSE_RANK (Transact-SQL)

Returns the rank of rows within the partition of a result set, without any gaps in the ranking. The rank of a row is one plus the number of distinct ranks that come before the row in question.

declare @T table
(
ID int identity,
VendorID int,
CustomerID int,
ProductID int
);

insert into @T values
(1, 2, 3),
(1, 2, 3),
(1, 2, 4),
(1, 2, 3);

select sale.ID,
sale.VendorID,
sale.CustomerID,
sale.ProductID,
dense_rank() over(order by sale.VendorID,
sale.CustomerID,
sale.ProductID) as AutoNumber
from @T as sale
order by sale.ID;

结果:

ID          VendorID    CustomerID  ProductID   AutoNumber
----------- ----------- ----------- ----------- --------------------
1 1 2 3 1
2 1 2 3 1
3 1 2 4 2
4 1 2 3 1

关于sql-server - 是否有等效于 QlikView 的 AutoNumber() 的 SQL Server 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49194490/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com