繁体   English   中英

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

[英]sql query for for merging two query of same row

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| 

您可以将其表达为使用单个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;

如果您只是一般性地询问,请在两个查询之间使用并

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"
SELECT (SSTA*2) as gst, sum(SSTAAMO) as gstamo 
  FROM DIS 
  WHERE INLIST(FLG,"P","G") 
  GROUP BY SSTA

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

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

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

我要两行

如果我了解您想要的内容,似乎您希望“ P”的gst在一行中,而“ G”的gst在另一行中。

如果要从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,但是您可以单独使用FLG字段,而不必使用IIF()命令,但是请确保将其包括在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   

祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM