Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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
Sql 折叠case语句返回数据?_Sql - Fatal编程技术网

Sql 折叠case语句返回数据?

Sql 折叠case语句返回数据?,sql,Sql,我创建了一个查询,用于从发票表中提取年度销售总额,但当我运行该查询时,会得到大量0列和重复的行数据,因为不是每年都有,而且cust numb有销售。这是我的密码 SELECT * INTO #REVTEMP FROM ( SELECT YEAR(CONVERT(CHAR(10), DATEADD(d, INVC_RDAT +5843, 0), 1)) [YEAR] ,ISNULL(b.BILLTO_NUMB,c.BILLTO_NUMB)[BILL TO NUMB] ,ISNULL(B.BIL

我创建了一个查询,用于从发票表中提取年度销售总额,但当我运行该查询时,会得到大量0列和重复的行数据,因为不是每年都有,而且cust numb有销售。这是我的密码

SELECT * INTO #REVTEMP FROM
(
SELECT 

YEAR(CONVERT(CHAR(10), DATEADD(d, INVC_RDAT +5843, 0), 1)) [YEAR]
,ISNULL(b.BILLTO_NUMB,c.BILLTO_NUMB)[BILL TO NUMB]
,ISNULL(B.BILLTO_NAME, C.BILLTO_NAME) [CLIENT]
,SUM(CAST(NET_DLR AS MONEY)) [SALES REVENUE]

FROM placeholder.JR80 a
left outer join placeholder.DBO.JC10 b on b.JOB_NUMB = a.JOB_NUMB
left outer join placeholder.DBO.OE10 C ON C.ORD_NUMB = A.JOB_NUMB

 --where b.BILLTO_NUMB = 13651


 GROUP BY 
 b.BILLTO_NUMB
 ,C.BILLTO_NUMB
 ,YEAR(CONVERT(CHAR(10), DATEADD(d, INVC_RDAT +5843, 0), 1))
 ,B.BILLTO_NAME
 ,C.BILLTO_NAME

  --order by YEAR(CONVERT(CHAR(10), DATEADD(d, INVC_RDAT +5843, 0), 1))
  ) AS #REVETEMP

  SELECT 
    #REVTEMP.[BILL TO NUMB]
    ,CASE WHEN #REVTEMP.YEAR = 2006 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2006 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2007 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2007 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2008 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2008 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2009 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2009 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2010 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2010 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2011 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2011 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2012 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2012 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2013 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2013 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2014 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2014 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2015 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2015 REVENUE]
    ,CASE WHEN #REVTEMP.YEAR = 2016 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END AS [2016 REVENUE]

    FROM #REVTEMP

  DROP TABLE #REVTEMP
我的结果是这样的

BILL TO NUMB    2006 REVENUE    2007 REVENUE    2008 REVENUE    2009 REVENUE    2010 REVENUE    2011 REVENUE    2012 REVENUE    2013 REVENUE    2014 REVENUE    2015 REVENUE    2016 REVENUE
00022   0.00    726.28  0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
00022   0.00    0.00    0.00    1835.79 0.00    0.00    0.00    0.00    0.00    0.00    0.00
00022   0.00    0.00    0.00    0.00    802.21  0.00    0.00    0.00    0.00    0.00    0.00
00022   0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
00027   0.00    346.22  0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
00037   0.00    0.00    0.00    1242.78 0.00    0.00    0.00    0.00    0.00    0.00    0.00
00037   0.00    0.00    0.00    1940.50 0.00    0.00    0.00    0.00    0.00    0.00    0.00
00037   0.00    0.00    0.00    0.00    255.21  0.00    0.00    0.00    0.00    0.00    0.00
00123   0.00    986.20  0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

我希望每个cust numb只有一行包含其所有数据。我想我可能想得太多了,但我不知道如何去掉多余的行

如果我了解您的要求,您需要一个分组,并汇总案例陈述(总和似乎是个好主意),因此:

SELECT 
    #REVTEMP.[BILL TO NUMB]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2006 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2006 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2007 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2007 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2008 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2008 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2009 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2009 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2010 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2010 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2011 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2011 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2012 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2012 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2013 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2013 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2014 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2014 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2015 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2015 REVENUE]
    ,sum(CASE WHEN #REVTEMP.YEAR = 2016 THEN #REVTEMP.[SALES REVENUE] ELSE 0 END) AS [2016 REVENUE]
    FROM #REVTEMP
group by #REVTEMP.[BILL TO NUMB]