sql查询用于合并同一行的两个查询

时间:2018-05-30 18:11:20

标签: mysql sql foxpro dbase

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 :(得分:4)

您可以使用单个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;

答案 1 :(得分:1)

如果你只是问一般,请在两个查询之间使用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更改为:

WHERE FLG="P" OR FLG="G"

答案 2 :(得分:0)

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

答案 3 :(得分:0)

目前尚不清楚您使用的SQL语法。

请记住,您的SQL语法需要匹配从中获取数据的数据库。 Foxpro SQL语法略微不标准,与MySQL SQL语法不同。

您的发布标签: mysql sql foxpro dbase
包括Foxpro,我可以假设你使用FP SQL语法来查询Foxpro数据表吗?

  

我想要两个gst行

如果我理解你想要的东西,似乎你想要gst for" 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"分成结果行。如果需要,您可以随后删除该额外字段。

如果您使用不支持IIF()语法的SQL语法从另一个数据库获取数据,则可以使用CASE语法创建新的SORTFLG。

编辑:为什么我之前没想过,我不知道。无论如何,您根本不需要IIF()语法。你仍然可以引入新的第二个字段 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   

祝你好运