2016-09-26 127 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; 

當然,如果複製的字符串比單個字符越多,那麼輸出結果會有所不同