PS查询表达式中可以使用FROM吗?如果没有,还有替代解决方案吗?

时间:2019-07-03 21:07:29

标签: peoplesoft

我是PS查询和SQL的新手。我有一个正常工作的SQL,但是无法将其转换为PS Query。

因此,基本上,我想比较一下我的产品及其每列的数量。

这是我的示例数据:

Product | Month | Amount
--------|-------|-------
Phone   | 2     | 25 
Laptop  | 2     | 30 
Phone   | 1     | 20 
Laptop  | 1     | 40    

下面是我很难转换为PS查询的代码:

Select ….
  SUM(CASE WHEN Product1 <> Product2 AND Product2 = Laptop THEN 30
/*On my second statement, when the product are equal, i need to get the amount on the previous month.*/
           WHEN Product1 = Product3 AND Product3 = Phone 
           THEN (SELECT Amount
                  FROM FINAL_TBL B
                  WHERE B.PERIOD = A.PERIOD - 1)
              ELSE 0
       END) AS Amount

From FINAL_TBL FTBL A
Where <Conditions>

我的预期输出应该是

Product1    | Amount1   | Product2  | Amount2   | Product3  | Amount3
------------|-----------|-----------|-----------|-----------|--------
Phone       | 25        | Laptop    | 30        | Phone     | 20

2 个答案:

答案 0 :(得分:0)

您不能在PSQUERY表达式中添加FROM

您要翻译的查询可以重写为:

Select *
  SUM(CASE WHEN Product1 <> Product2 AND Product2 = Laptop 
                THEN 30
           WHEN Product1 = Product3 AND Product3 = Phone 
                THEN B.Amount
           ELSE 0
       END) AS Amount
FROM FINAL_TBL A, FINAL_TBL B
WHERE B.PERIOD = A.PERIOD - 1
AND <Conditions>

但是此查询或原始查询都不会导致您期望的输出。您正在寻找的是documentation子句。

答案 1 :(得分:0)

每当遇到无法通过PSQuery构建或难以建立复杂查询的情况时,我都会在具有SQL的App Designer中创建视图。

enter image description here

enter image description here

然后创建一个PSQuery,从该视图中进行选择。我假设您的<conditions>是要在运行查询时输入的用户输入数据,因此请将这些条件添加到您构建的PSQuery中。

但是,我认为您应该重新考虑您要对查询执行的操作。看来您要列出所有在X月份购买的产品/价格,以及X月份第一个产品的价格-1。只有两个可能的产品(笔记本电脑和手机),这才可以,但是当您开始添加更多类型的产品时,您将需要更多PRODUCTPRICE列。我认为您无法通过PSQuery做到这一点,因为您无法获得动态的列数。

如果您可以解释您要完成的任务以及原因,那么有人也许可以提出一种可以通过PSQuery起作用的替代方案。