HANA中的游标

2020-08-17 18:17发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我需要将类似于以下提到的查询从SQL迁移到HANA。 有人可以就这个话题提供建议吗?

声明@Anexo NVARCHAR(1)

声明@PN NVARCHAR(15)

声明@Total NUMERIC(19,6)

创建表#tabela(Anexo NVARCHAR(1),PN NVARCHAR(15),总计NUMERIC(19,6))

DECLARE c1光标用于

从OPCH中选择" A",CardCode和DocTotal

打开c1

从c1下一步获取@ Anexo,@ PN,@ Total

@@ fetch_status <> -1

开始插入#tabela(Anexo,PN,总计)

值(@ Anexo,@ PN,@ Total)

从c1下一步获取@ Anexo,@ PN,@ Total

结束

关闭c1

取消分配c1

从#tabela中选择Anexo,PN,总和(总计)AS总计

分组,按PN

DROP TABLE #tabela

谢谢!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我需要将类似于以下提到的查询从SQL迁移到HANA。 有人可以就这个话题提供建议吗?

声明@Anexo NVARCHAR(1)

声明@PN NVARCHAR(15)

声明@Total NUMERIC(19,6)

创建表#tabela(Anexo NVARCHAR(1),PN NVARCHAR(15),总计NUMERIC(19,6))

DECLARE c1光标用于

从OPCH中选择" A",CardCode和DocTotal

打开c1

从c1下一步获取@ Anexo,@ PN,@ Total

@@ fetch_status <> -1

开始插入#tabela(Anexo,PN,总计)

值(@ Anexo,@ PN,@ Total)

从c1下一步获取@ Anexo,@ PN,@ Total

结束

关闭c1

取消分配c1

从#tabela中选择Anexo,PN,总和(总计)AS总计

分组,按PN

DROP TABLE #tabela

谢谢!

付费偷看设置
发送
4条回答
天桥码农
1楼-- · 2020-08-17 19:18

根据您的最后评论,"示例"代码与实际代码之间的一般方法相同。 并且建议保持不变。 您无需查询数据,将其存储在临时表中,然后对临时表进行另一次查询。 您可以在单个查询中执行此操作。 但是您应该分解逻辑以拥有一个结构化的,易于阅读的视图。 一种选择是使用公用表表达式(CTE)。 例如:

将数据作为(选择...您的3条语句,并结合所有条件)
选择ANEXO,PN,NOME,NIF,CODIVA,sum(TOTAL)作为TOTAL FROM数据;
Tong__Ming
2楼-- · 2020-08-17 19:22

Florian Pfeffer 在此查询中,我展示了一个简单的select语句, 而实际查询根据某些条件会有更多的记录,在这种情况下,我们还可以使用原始表还是可以给我一些建议?


提前谢谢

d56caomao
3楼-- · 2020-08-17 19:08

显示您的陈述,然后也许有人可以为您提供帮助。 在这种情况下,描述"伪"语句不是很有帮助。

xfwsx85
4楼-- · 2020-08-17 19:03

这一次,我还在select语句中共享了一些条件,因为它超出了允许的最大字符数 评论部分。

声明@Anexo NVARCHAR(1)

声明@PN NVARCHAR(15)

声明@Nome NVARCHAR(100)

DECLARE @NIF NVARCHAR(10)

声明@CodIVA NVARCHAR(3)

声明@Total NUMERIC(19,6)

SET @DataDe = {?Data1}

SET @DataAte = {?Data2}

创建表#tabela(Anexo NVARCHAR(1),PN NVARCHAR(15),Nome NVARCHAR(100),NIF NVARCHAR(10),CodIVA NVARCHAR(3),总计NUMERIC(19,6))

DECLARE c1光标用于

SELECT'O',T20.CardCode,T20.CardName,(CASE SUBSTRING(T04.LicTradNum,3,9)时'THEN SUBSTRING(T20.LicTradNum,3,9)ELSE SUBSTRING(T04.LicTradNum,3 ,9)END),T06.Vatgroup,Sum((T06.LineTotal + T06.VatSum)* -1)来自ORIN T04内部联接RIN2 T06 ON T06.DocEntry = T04.DocEntry内部联接OCRD T20 ON T04.CardCode = T20 .CardCode WHERE T20.CardType ='O'AND T20.LicTradNum像'PT%'AND(@DataDe AND @DataAte之间的T04.DocDate)和isull(T06.Vatgroup,``)!=''AND(CASE SUBSTRING( T04.LicTradNum,3,9)当''THEN SUBSTRING(T20.LicTradNum,3,9)ELSE SUBSTRING(T04.LicTradNum,3,9)END)<>'999999990'GROUP BY T20.CardCode,T20.CardName, (案例SUBSTRING(T04.LicTradNum,3,9)则" THEN SUBSTRING(T20.LicTradNum,3,9)ELSE SUBSTRING(T04.LicTradNum,3,9)END),T06.Vatgroup

----- TRATA RIN3

全部联盟

SELECT'O',T20.CardCode,T20.CardName,(CASE SUBSTRING(T04.LicTradNum,3,9)当''THEN SUBSTRING(T20.LicTradNum,3,9)ELSE SUBSTRING(T04.LicTradNum,3 ,9)END),T07.Vatgroup,Sum((T07.LineTotal + T07.VatSum)* -1)来自ORIN T04内部联接RIN3 T07 ON T07.DocEntry = T04.DocEntry内部联接OCRD T20 ON T04.CardCode = T20 .CardCode WHERE T20.CardType ='O'AND T20.LicTradNum像'PT%'AND(@DataDe AND @DataAte之间的T04.DocDate)和isull(T07.Vatgroup,``)!=''AND(CASE SUBSTRING( T04.LicTradNum,3,9)当''THEN SUBSTRING(T20.LicTradNum,3,9)ELSE SUBSTRING(T04.LicTradNum,3,9)END)<>'999999990'GROUP BY T20.CardCode,T20.CardName, (当案例SUBSTRING(T04.LicTradNum,3,9)时,那么THEN SUBSTRING(T20.LicTradNum,3,9)ELSE SUBSTRING(T04.LicTradNum,3,9)END),T07.Vatgroup

全部联盟

SELECT'O',T20.CardCode,T20.CardName,(CASE SUBSTRING(T16.LicTradNum,3,9)时'THEN SUBSTRING(T20.LicTradNum,3,9)ELSE SUBSTRING(T16.LicTradNum,3) ,9)END),T18.Vatgroup,sum(isnull(T18.GrossValue,0)-isull(T18.Vatamount,0))来自JDT1 T16内部联接OCRD T20 ON T16.ShortName = T20.CardCode内部联接OJDT T17 ON T16.TransId = T17.TransId内部联接JDT1 T18开启T16.TransId = T18.TransId内部联接OVTG T19开启T18.VatGroup = T19。代码WHERE T20.CardType ='C'和T20.LicTradNum如'PT%'AND( @DataDe和@DataAte之间的T16.refdate)和T16.transtype ='30'和T16.ShortName!= T16.Account和T17.AutoVat ='Y'和T19.AcqstnRvrs ='Y'和T18.Credit <> 0 AND isull(T18.Vatgroup,'')!=''AND(案例SUBSTRING(T16.LicTradNum,3,9)当''THEN SUBSTRING(T20.LicTradNum,3,9)ELSE SUBSTRING(T16.LicTradNum,3, 9)END)<>'999999990'GROUP BY T20.CardCode,T20.CardName,(CASE SUBSTRING(T16.LicTradNum,3,9)when''THEN SUBSTRING(T20.LicTradNum,3,9)ELSE SUBSTRING(T16。 力克 radNum,3,9)END),T18.Vatgroup

打开c1

从c1下一步获取@ Anexo,@ PN,@ Nome,@ NIF,@ CodIVA,@ Total

@@ fetch_status <> -1

开始

插入#tabela(Anexo,PN,Nome,NIF,CodIVA,总计)

值(@ Anexo,@ PN,@ Nome,@ NIF,@ CodIVA,@ Total)

从c1下一步获取@ Anexo,@ PN,@ Nome,@ Nif,@ CodIVA,@ Total

结束

关闭c1

取消分配c1

从#tabela组选择Anexo,PN,Nome,NIF,CodIVA,SUM(总计)AS总计Anexo,PN,Nome,NIF,CodIVA

DROP TABLE #tabela

感谢您的帮助。 Florian Pfeffer

一周热门 更多>