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|
答案 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
祝你好运