SQL запрос для объединения двух запросов одной строки - PullRequest
0 голосов
/ 30 мая 2018
SELECT (SSTA*2)as gst, sum(SSTAAMO) as gstamo FROM DIS GROUP BY SSTA WHERE FLG="P"

SELECT (SSTA*2)as gst, sum(SSTAAMO) as gstamo FROM DIS GROUP BY SSTA WHERE FLG="G"

как сделать так, чтобы один запрос выполнялся одновременно.

P                G
Gst| gstamo|     gst| gstamo| 

Ответы [ 4 ]

0 голосов
/ 31 мая 2018

Не ясно, какой синтаксис SQL вы используете.

Помните, что ваш синтаксис SQL должен соответствовать базе данных, из которой вы получаете свои данные.Синтаксис Foxpro SQL немного нестандартен и отличается от синтаксиса MySQL SQL.

Ваши теги публикации: mysql sql foxpro dbase
включают Foxpro, поэтому я могу предположить, что выиспользовать синтаксис FP SQL для запроса таблиц данных Foxpro?

Я хочу две строки gst

Если я понимаю, что вы хотите, кажется, что вы хотите, чтобы gst для результатов "P" в одной строке и gstдля "G" результаты в отдельном ряду.

Если вы получаете данные из таблицы данных Foxpro, то вы можете рассмотреть что-то вроде следующего:

SELECT (SSTA*2)as gst, IIF(Flg = "P","P","G") as SortFlg, sum(SSTAAMO) as gstamo FROM DIS WHERE FLG $ "P,G" GROUP BY 1,2   

Представление добавленного поля SORTFLG и его создание (поле # 2)часть оператора GROUP BY, заставит результаты для «P» и «G» в отдельные строки результатов.Вы всегда можете удалить это дополнительное поле позже, если хотите.

Если вы получаете данные из другой базы данных с синтаксисом SQL, который не поддерживает синтаксис IIF (), вы можете использовать синтаксис CASE для создания нового SORTFLG.

EDIT: Почему я не думал об этом раньше, я понятия не имею.В любом случае, вам вообще не нужен синтаксис IIF ().Вы все еще можете ввести новое 2-е поле SORTFLG , но вместо использования команды IIF () вы можете использовать только поле FLG, но убедитесь, что вы включили его в строку GROUP BY, чтобы ваш результатбудет иметь отдельную запись "P" и запись "G".

SELECT (SSTA*2)as gst, Flg as SortFlg, sum(SSTAAMO) as gstamo FROM DIS WHERE FLG $ "P,G" GROUP BY 1,2   

Удачи

0 голосов
/ 30 мая 2018

Если вы просто спрашиваете в общем, используйте union между двумя запросами.

SELECT (SSTA*2)as gst, sum(SSTAAMO) as gstamo FROM DIS GROUP BY SSTA WHERE FLG="P"
UNION
SELECT (SSTA*2)as gst, sum(SSTAAMO) as gstamo FROM DIS GROUP BY SSTA WHERE FLG="G"

Если вы спрашиваете конкретно код, который вы разместили, просто измените свойГДЕ:

WHERE FLG="P" OR FLG="G"
0 голосов
/ 30 мая 2018
SELECT (SSTA*2) as gst, sum(SSTAAMO) as gstamo 
  FROM DIS 
  WHERE INLIST(FLG,"P","G") 
  GROUP BY SSTA
0 голосов
/ 30 мая 2018

Вы можете выразить это как одно where предложение:

SELECT SSTA*2 as gst, 
       sum(SSTAAMO) as gstamo 
FROM DIS 
WHERE FLG in ('P', 'G')
GROUP BY SSTA;

Для отдельных столбцов вы можете использовать условие агрегирование:

SELECT SSTA*2 as gst, 
       sum(case when FLG = 'P' then SSTAAMO else 0 end) as Pgstamo,
       sum(case when FLG = 'G' then SSTAAMO else 0 end) as Ggstamo  
FROM DIS 
WHERE FLG in ('P', 'G')
GROUP BY SSTA;
...