我是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
答案 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中创建视图。
然后创建一个PSQuery,从该视图中进行选择。我假设您的<conditions>
是要在运行查询时输入的用户输入数据,因此请将这些条件添加到您构建的PSQuery中。
但是,我认为您应该重新考虑您要对查询执行的操作。看来您要列出所有在X月份购买的产品/价格,以及X月份第一个产品的价格-1。只有两个可能的产品(笔记本电脑和手机),这才可以,但是当您开始添加更多类型的产品时,您将需要更多PRODUCT
和PRICE
列。我认为您无法通过PSQuery做到这一点,因为您无法获得动态的列数。
如果您可以解释您要完成的任务以及原因,那么有人也许可以提出一种可以通过PSQuery起作用的替代方案。