Можно ли использовать FROM в выражении запроса PS? Если нет, есть ли альтернативное решение? - PullRequest
0 голосов
/ 04 июля 2019

Я новичок в PS Query и SQL.У меня есть рабочий SQL, однако я не могу перевести его в PS Query.

Поэтому я хотел бы представить сравнение моих продуктов и их количества в столбце.

Вот мои примеры данных:

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

Ниже приведен код, который мне сложно перевести на PS Query:

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 голосов
/ 04 июля 2019

Всякий раз, когда я сталкиваюсь с ситуацией, когда у меня возникает сложный запрос, который сложно или невозможно построить с помощью PSQuery, я создаю представление в App Designer, в котором есть SQL.

enter image description here

enter image description here

Затем создайте PSQuery там, где вы выбираете из этого представления.Я предполагаю, что ваши <conditions> - это введенные пользователем данные, которые вы хотите ввести при выполнении запроса, поэтому добавьте эти условия в создаваемый вами PSQuery.

Однако , я думаю, выследует переосмыслить то, что вы пытаетесь сделать с вашим запросом.Похоже, вы пытаетесь перечислить все товары / цены, которые были куплены в месяце X, а также цену на первый товар для месяца X - 1. С двумя возможными продуктами (ноутбуки и телефоны) это будет работать, но когда вы начнете добавлять больше типов продуктов, вам потребуется больше столбцов PRODUCT и PRICE.Я не думаю, что вы сможете сделать это с помощью PSQuery, потому что у вас не может быть динамического числа столбцов.

Если бы вы могли объяснить, что вы пытаетесь достичь и почему, тогда кто-то можетуметь предложить альтернативу, которая будет работать через PSQuery.

0 голосов
/ 04 июля 2019

Вы не можете добавить FROM в выражение PSQUERY.

Запрос, который вы пытаетесь перевести, можно переписать на:

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>

Но ни этот, ни исходный запрос не приведут к ожидаемым результатам. То, что вы ищете, это предложение PIVOT .

...