Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL联合结果是一列而不是一行_Mysql_Sql Server_Join - Fatal编程技术网

MySQL联合结果是一列而不是一行

MySQL联合结果是一列而不是一行,mysql,sql-server,join,Mysql,Sql Server,Join,我需要选择两个sum字段,其中一个sum()的结果等于男性,另一个sum()的结果等于女性 我目前的问题是这样的 (SELECT 'Male' AS Gender, FLOOR(SUM( f.factTotalCost )) AS Spent, t.timeYear AS Year FROM fact_usage f LEFT JOIN dim_time t ON t.timeID = f.timeID LEFT JOIN dim_customer c ON c.customerID = f

我需要选择两个sum字段,其中一个sum()的结果等于男性,另一个sum()的结果等于女性

我目前的问题是这样的

(SELECT 'Male' AS Gender, FLOOR(SUM( f.factTotalCost )) AS Spent, t.timeYear AS Year
FROM fact_usage f 
LEFT JOIN dim_time t ON t.timeID = f.timeID 
LEFT JOIN dim_customer c ON c.customerID = f.customerID WHERE t.timeYear IS NOT NULL AND c.customerGender = 'Male' GROUP BY t.timeYear 
ORDER BY t.timeYear ASC
)
UNION
(
SELECT 'Female' AS Gender, FLOOR(SUM( f.factTotalCost )) AS Spent, t.timeYear AS Year
FROM fact_usage f 
LEFT JOIN dim_time t ON t.timeID = f.timeID 
LEFT JOIN dim_customer c ON c.customerID = f.customerID WHERE t.timeYear IS NOT NULL AND c.customerGender = 'Female' GROUP BY t.timeYear
ORDER BY t.timeYear ASC
它返回这个

 +--------+----------+------+
    | Gender | Spent    | Year |
    +--------+----------+------+
    | Male   | 21180082 | 1990 |
    | Male   | 21415296 | 1991 |
    | Male   | 21401956 | 1992 |
    | Male   | 21104179 | 1993 |
    | Male   | 21209182 | 1994 |
    | Male   | 21232913 | 1995 |
    | Male   | 21289882 | 1996 |
    | Male   | 21049297 | 1997 |
    | Male   | 21116410 | 1998 |
    | Male   | 21318029 | 1999 |
    | Male   | 21346531 | 2000 |
    | Male   | 21422877 | 2001 |
    | Male   | 21496714 | 2002 |
    | Male   | 21299382 | 2003 |
    | Male   | 21277839 | 2004 |
    | Male   | 21436301 | 2005 |
    | Male   | 21415851 | 2006 |
    | Male   | 21335662 | 2007 |
    | Male   | 21097699 | 2008 |
    | Male   | 21459088 | 2009 |
    | Male   | 21266998 | 2010 |
    | Male   | 21256936 | 2011 |
    | Male   | 21233116 | 2012 |
    | Male   | 21329422 | 2013 |
    | Male   | 21176809 | 2014 |
    | Male   | 21197822 | 2015 |
    | Female | 21119160 | 1990 |
    | Female | 21184234 | 1991 |
    | Female | 20984759 | 1992 |
    | Female | 21030674 | 1993 |
    | Female | 20810592 | 1994 |
    | Female | 20846809 | 1995 |
    | Female | 20847376 | 1996 |
    | Female | 20823927 | 1997 |
    | Female | 20757323 | 1998 |
    | Female | 20933808 | 1999 |
    | Female | 21021068 | 2000 |
    | Female | 21007603 | 2001 |
    | Female | 21155283 | 2002 |
    | Female | 21302091 | 2003 |
    | Female | 21269045 | 2004 |
    | Female | 21008866 | 2005 |
    | Female | 21060483 | 2006 |
    | Female | 21056181 | 2007 |
    | Female | 21039697 | 2008 |
    | Female | 21180452 | 2009 |
    | Female | 21035352 | 2010 |
    | Female | 20918044 | 2011 |
    | Female | 21113909 | 2012 |
    | Female | 21056023 | 2013 |
    | Female | 20976295 | 2014 |
    | Female | 21017583 | 2015 |
    +--------+----------+------+
但我需要它回来

+--------+----------+------+
|Female  | Male     | Year |
+--------+----------+------+
|4848448 | 21180082 | 1990 |
|3888283 | 21415296 | 1991 |
|3323222 | 21401956 | 1992 |
|3232322 | 21104179 | 1993 |
|4444544 | 21209182 | 1994 |
|3434343 | 21232913 | 1995 |
|3434345 | 21289882 | 1996 |
|2325545 | 21049297 | 1997 |
|6556565 | 21116410 | 1998 |
|3434343 | 21318029 | 1999 |
|3434343 | 21346531 | 2000 |
|3434343 | 21422877 | 2001 |
|5454546 | 21496714 | 2002 |
|6767545 | 21299382 | 2003 |
|4557556 | 21277839 | 2004 |
|4547774 | 21436301 | 2005 |
|4545433 | 21415851 | 2006 |
|3435535 | 21335662 | 2007 |
|3443424 | 21097699 | 2008 |
|2323224 | 21459088 | 2009 |
|2325353 | 21266998 | 2010 |
|3342434 | 21256936 | 2011 |
|3444333 | 21233116 | 2012 |
|2324444 | 21329422 | 2013 |
|3434334 | 21176809 | 2014 |
|6454564 | 21197822 | 2015 |
+--------+----------+------+

我真的被它困住了,花了好几个小时试图让它工作:(

我想你只需要条件聚合:

SELECT t.timeYear AS Year,
       SUM(CASE WHEN c.customerGender = 'Male' THEN f.factTotalCost ELSE 0 END) as male,
       SUM(CASE WHEN c.customerGender = 'Female' THEN f.factTotalCost ELSE 0 END) as female
FROM fact_usage f JOIN
     dim_time t
     ON t.timeID = f.timeID JOIN
     dim_customer c
     ON c.customerID = f.customerID
WHERE t.timeYear IS NOT NULL
GROUP BY t.timeYear 
ORDER BY t.timeYear ASC;

外部联接是不必要的,因为
WHERE
子句无论如何都会将它们转换为内部联接。

非常好,工作非常漂亮。非常感谢