我目前正在学习如何在查询中使用MySQL
,而且我处于两难境地。
目前,我有2个查询从多个表中获取数据。两个查询都包含相同数量的列字段和字段名称。
为简单起见,查询的输出如下所示:
QueryOne:
FieldOne| FieldTwo | FieldThree | CountOne | CountTwo | CountThree
data1 | data11 | data111 | 3 | 0 | 0
data2 | data22 | data222 | 0 | 1 | 0
data3 | data33 | data333 | 0 | 0 | 2
data4 | data44 | data444 | 0 | 4 | 0
data5 | data55 | data444 | 0 | 0 | 1
QueryTwo:
FieldOne| FieldTwo | FieldThree | CountOne | CountTwo | CountThree
data1 | data11 | data111 | 1 | 0 | 0
data1 | data11 | data111 | 0 | 0 | 2
data6 | data66 | data666 | 0 | 5 | 0
两个查询都包含FieldOne-FieldThree的相同数据,但可能包含CountOne-CountThree的不同值。
数据将永远不会包含所有3个字段CountOne, CountTwo, CountThree
中的值,而只会包含这3个字段的 ONE 中的值。
我要做的是创建一个单独的UNION QUERY
,其输出如下:
FieldOne| FieldTwo | FieldThree | CountOne | CountTwo | CountThree
data1 | data11 | data111 | 4 | 0 | 0
data1 | data11 | data111 | 0 | 0 | 2
data2 | data22 | data222 | 0 | 1 | 0
data3 | data33 | data333 | 0 | 0 | 2
data4 | data44 | data444 | 0 | 4 | 0
data5 | data55 | data444 | 0 | 0 | 1
data6 | data66 | data666 | 0 | 5 | 0
基本上,如果FieldOne
中有相同数据的多个实例,并且同一CountOne
,CountTwo
或CountThree
中有一个值我希望得到该字段的 SUM 并按FieldOne
对该数据进行分组。
但是,如果同一数据有多个实例,但它包含不同Count
字段中的值,则查询应为其创建单独的记录,如示例中所示{{ 1}}包含data1
和CountOne
字段中的值。
我在Access 2013的CountTwo
中使用SQL View
:
UNION QUERY
但是,由于我的知识有限,我一直坚持如何将我想要的内容整合到上面的代码中,而不是创建另一个单独的查询。
答案 0 :(得分:2)
您可以根据union
的结果使用带和和的分组select FieldOne
, FieldTwo
, FieldThree
, sum(CountOne )
, sum(CountTwo )
, sum(CountThree )
from (
Select FieldOne
, FieldTwo
, FieldThree
, CountOne
, CountTwo
, CountThree
FROM my_view1
UNION ALL
Select FieldOne
, FieldTwo
, FieldThree
, CountOne
, CountTwo
, CountThree
FROM my_view2
) T
group by FieldOne
, FieldTwo
, FieldThree
order by FieldOne
如果你想要合并不同的值,可以使用UNION,如果你想要将所有结果合并为联合选择,你可以使用UNION ALL。
并做你的" bit confusion"关于在union subselect中使用查询
select FieldOne
, FieldTwo
, FieldThree
, sum(CountOne )
, sum(CountTwo )
, sum(CountThree )
from (
Select FieldOne
, FieldTwo
, FieldThree
, CountOne
, CountTwo
, CountThree
FROM ( select col1 as FieldOne, col2 as FieldTwo .....
from ...
where
) TT_A
UNION ALL
Select FieldOne
, FieldTwo
, FieldThree
, CountOne
, CountTwo
, CountThree
FROM ( select col1 as FieldOne, col2 as FieldTwo .....
from ...
where
) TT_B
) T
group by FieldOne
, FieldTwo
, FieldThree
order by FieldOne