[英]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.