英文:
Getting fetch returns more than requested number of rows error SQL HANA SAP
问题
抱歉,您提供的内容已经是翻译好的,没有需要额外翻译的部分。如果您需要进一步的帮助或有其他问题,请随时提出。
英文:
Hello can you please help me fix this query :
SELECT T1."Price" into pght FROM ITM1 T1 WHERE T1."PriceList" = '1';
UPDATE "ITM1"
SET ITM1."Factor" = T2."U_COEFFICIENT" , ITM1."Price" = T2."U_COEFFICIENT" * pght
FROM ITM1
INNER JOIN OITM T0 ON T0."ItemCode" = ITM1."ItemCode"
INNER JOIN OMRC T1 ON T1."FirmCode" = T0."FirmCode"
INNER JOIN "@PR_MARQUES_ASSOCIE" T2 ON T1."FirmName" = T2."U_MARQUES"
WHERE T2."U_MARQUES" = 'ROCHAS' AND T2."Code" = '01'
AND ITM1."PriceList" = '2' AND T1."FirmName" = 'ROCHAS';
This is the error I get:
> Getting fetch returns more than requested number of rows error
Actually my goal is to update the column ITM1."Price" where ITM1."PriceList" = '2' with the price Value where the "PriceList" = '1' * factor
For example:
ITM1."Price" and "PriceList" = '1' = 40 $
ITM1."Factor" = T2."U_COEFFICIENT" = 4
Then
ITM1."Price" and "PriceList" = '2' = 160 $
I tried the above query (in the body) and I think it's not correct.
UPDATE :
The message returned is the one in the title : 'Getting fetch returns more than requested number of rows error' .
The lookup need to take account the item from ITM1 .
It should take the price list = '1' which represent the 'purchase price' and multiplie with the factor .
"U_COEFFICIENT" is used in another table to manipulate and update the column "Factor" from table ITM1
答案1
得分: 0
以下是翻译好的部分:
错误消息是由以下语句引起的:
SELECT T1."Price" INTO pght FROM ITM1 T1 WHERE T1."PriceList" = '1';
与表格 ITM1 中的数据组合在一起。
SELECT INTO 需要由 SELECT 语句返回的标量 - 即单个值。如果有更多(或根本没有值),则会返回错误消息。
为避免此错误,有几个选项:
- 使筛选条件非常具体,以仅返回单个记录。
- 使用聚合,例如
MAX(T1."Price")仅返回单个值。 - 确保表格中的数据不对筛选条件具有多个记录。
根据列名和表名,我猜测此查询的目的是使用 "Pricelist"=1 中的相同项目的值乘以某个因子来更新表 ITM1 中 "Pricelist"=2 的项目的价格。如果确实如此,关联子查询或联接将是可能的解决方法之一。
以下是外部连接的示例:
UPDATE "ITM1"
SET ITM1."Factor" = T2."U_COEFFICIENT"
, ITM1."Price" = T2."U_COEFFICIENT" * COALESCE(ITM_P1."Price", 1.0)
FROM ITM1
LEFT OUTER JOIN ITM1 ITM_P1
ON ITM1."ItemCode" = ITM_P1."ItemCode"
AND ITM1."PriceList" = '2'
AND ITM_P1."PriceList" = '1'
INNER JOIN OITM T0
ON T0."ItemCode" = ITM1."ItemCode"
INNER JOIN OMRC T1
ON T1."FirmCode" = T0."FirmCode"
INNER JOIN "@PR_MARQUES_ASSOCIE" T2
ON T1."FirmName" = T2."U_MARQUES"
WHERE
T2."U_MARQUES" = 'ROCHAS'
AND T2."Code" = '01'
AND ITM1."PriceList" = '2'
AND T1."FirmName" = 'ROCHAS';
注意如何将 ITM1 与自身进行外部连接 - 外部连接允许处理那些没有 "PriceList"=1 记录的项目的情况。对于这些不匹配的情况,将返回 NULL,并且 COALESCE() 函数确保在这些情况下,项目价格将乘以 1.0。
英文:
The error message is caused by this statement:
SELECT T1."Price" INTO pght FROM ITM1 T1 WHERE T1."PriceList" = '1';
in combination with the data in table ITM1.
There are more than a single record in ITM1 that match the condition.
SELECT INTO requires a scalar - that is a single value - to be returned by the SELECT statement. If there are more (or no values at all) an error message is returned.
To avoid this error, there are a few options:
- make the filter conditions so specific that only a single record gets returned.
- use an aggregation, e.g.
MAX(T1."Price")to return only a single value. - make sure that the data in the table does not have multiple records for the filter condition.
Based on the column and table names I am guessing that the purpose for this query is to update the price of items in table ITM1 with "Pricelist"=2 with the value for the same item with "Pricelist=1" multiplied by some factor.
If that is indeed the case, a correlated subquery or a join would be a possible solution approaches.
Here is an example of how an outer join could work:
UPDATE "ITM1"
SET ITM1."Factor" = T2."U_COEFFICIENT"
, ITM1."Price" = T2."U_COEFFICIENT" * COALESCE(ITM_P1."Price", 1.0)
FROM ITM1
LEFT OUTER JOIN ITM1 ITM_P1
ON ITM1."ItemCode" = ITM_P1."ItemCode"
AND ITM1."PriceList" = '2'
AND ITM_P1."PriceList" = '1'
INNER JOIN OITM T0
ON T0."ItemCode" = ITM1."ItemCode"
INNER JOIN OMRC T1
ON T1."FirmCode" = T0."FirmCode"
INNER JOIN "@PR_MARQUES_ASSOCIE" T2
ON T1."FirmName" = T2."U_MARQUES"
WHERE
T2."U_MARQUES" = 'ROCHAS'
AND T2."Code" = '01'
AND ITM1."PriceList" = '2'
AND T1."FirmName" = 'ROCHAS';
Note how ITM1 is outer joined with itself - an outer join to allow for cases, where an item does not have a record with "PriceList"=1. For those non-matches a NULL will be returned and the COALESCE() function ensures that in those cases, the item price will be multiplied with 1.0.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论