2016-09-26 91 views
0

如果有人能够完全将此T-SQL查询转换为SAP HANA,我将很高兴。将T-SQL查询更改为SAP HANA

我想要做的是自动编号具有PV加6个数字前缀的查询。例如pv000001。我在T-SQL中使用它,但我有一个挑战,完全将其更改为SAP HANA;

DECLARE @NumRange integer; 
SET @NumRange := 6; 
SELECT 'PV' || replicate('0', @NumRange - LENGTH(MAX(ISNULL(Incnum, 0)))) || CAST(MAX(ISNULL(Incnum, 0)) + 1 AS varchar(6)) 
FROM (
    SELECT MAX(coalesce(substring(CounterRef, 3, LENGTH(ISNULL(CounterRef, 0))), 0)) AS "incnum" 
    FROM OVPM T0 
    UNION ALL 
    SELECT MAX(coalesce(substring(CounterRef, 3, LENGTH(ISNULL(CounterRef, 0))), 0)) AS "incnum" 
    FROM OPDF T0 WHERE t0.ObjType = '46' 
) AS Tb1; 
+1

[编辑]你的问题,并添加基于该数据的一些样本数据和预期输出。 [_Formatted_](http://stackoverflow.com/editing-help#code)**文本**,请[无屏幕截图](http://meta.stackoverflow.com/questions/285551/why-may-i -not-upload-images-code-on-so-when-asking-question-285557#285557) –

+0

你不能简单地使用'row_number()'来产生数字吗? –

回答

0

这是转换到HANA SQLScript查询和调整一下,以便它在我的SAP Business One的数据库工作:

DO BEGIN 
    DECLARE NumRange INTEGER; 
    NumRange := 6; 

    SELECT 'PV' || REPLICATE('0', :NumRange - LENGTH(MAX(IFNULL("Incnum", 0)))) || CAST(MAX(IFNULL("Incnum", 0)) + 1 AS VARCHAR(6)) 
    FROM (
     SELECT MAX(coalesce(substring("CounterRef", 3, LENGTH(IFNULL("CounterRef", 0))), 0)) AS "Incnum" 
     FROM OVPM T0 
     UNION ALL 
     SELECT MAX(coalesce(substring("CounterRef", 3, LENGTH(IFNULL("CounterRef", 0))), 0)) AS "Incnum" 
     FROM OPDF T0 
     WHERE t0."ObjType" = '46' 
    ) AS Tb1; 
END; 

HANA不具备复制功能,但你可以创建你拥有:

CREATE FUNCTION REPLICATE(input NVARCHAR(1000), count INT) 
RETURNS output NVARCHAR(1000) 
LANGUAGE SQLSCRIPT AS 
BEGIN 
    DECLARE i INT = 1; 
    output := ''; 
    FOR i IN 1 .. count DO 
     output := output || input; 
    END FOR; 
END; 

几点说明:

  • HANA仅允许SQL Script(DECLARE,FOR等)在块内部, 这就是为什么我将第一条语句包装在匿名DO BEGIN END块中的原因。

  • HANA区分大小写,因此我必须更改Incnum/incnum的不同外壳。

  • 只需使用他们的名字写变量,你用冒号(:)前面加上他们读他们

+0

创建函数并运行查询后,我得到下面的错误; –

+0

@JusticeDoku你还没有添加“以下错误”。该查询适用于SAP Business One 9.2 PL04上新的公司数据库。 – Hannobo

+0

嗨Hannobo,我尝试粘贴错误在这里,但我被提示我的值超过290消息。但是,如果您可以与我分享关于如何在SAP Business One版本中为HANA 9.2 PL 04应用查询的屏幕截图,我会很高兴。是否必须在HANA工作室中运行此功能并将上述查询应用于SAP Business One用户定义的字段? –

0

只是在HANA REPLICATE功能的快速说明

我们没有SQLScript复制功能,但LPAD字符串函数可以在许多情况下

一起使用。例如,如果在SQL服务器T-SQL我们:

select REPLICATE('0',4) 

在SAP HANA数据库中,SQLScript我们可以得到相同的结果如下:

select LPAD('',4,'0') as str from DUMMY; 

当然,如果复制的字符串比单个字符越多,那么输出结果会有所不同