Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Sql Server query conditional SUM

Posted on 2012-03-26
6
Medium Priority
?
567 Views
Last Modified: 2012-03-27
I have this query but instead return "valorliquido" field (in my actual query), i need return in each mount the following:

SUM(CASE WHEN TipoDoc <> 'NC' AND Anulado = 0 THEN valorliquido  END) - SUM(CASE WHEN TipoDoc = 'FC' AND Anulado = 0 THEN valorliquido  END)

How can do it.


My actual query:

SELECT year(DataDocumento) As 'Ano',

SUM(CASE month(DataDocumento) WHEN 1 THEN valorliquido ELSE 0 END) AS 'Jan',

SUM(CASE month(DataDocumento) WHEN 2 THEN valorliquido ELSE 0 END) AS 'Fev',

SUM(CASE month(DataDocumento) WHEN 3 THEN valorliquido ELSE 0 END) AS 'Mar',

SUM(CASE month(DataDocumento) WHEN 4 THEN valorliquido ELSE 0 END) AS 'Abr',

SUM(CASE month(DataDocumento) WHEN 5 THEN valorliquido ELSE 0 END) AS 'Mai',

SUM(CASE month(DataDocumento) WHEN 6 THEN valorliquido ELSE 0 END) AS 'Jun',

SUM(CASE month(DataDocumento) WHEN 7 THEN valorliquido ELSE 0 END) AS 'Jul',

SUM(CASE month(DataDocumento) WHEN 8 THEN valorliquido ELSE 0 END) AS 'Ago',

SUM(CASE month(DataDocumento) WHEN 9 THEN valorliquido ELSE 0 END) AS 'Set',

SUM(CASE month(DataDocumento) WHEN 10 THEN valorliquido ELSE 0 END) AS 'Out',

SUM(CASE month(DataDocumento) WHEN 11 THEN valorliquido ELSE 0 END) AS 'Nov',

SUM(CASE month(DataDocumento) WHEN 12 THEN valorliquido ELSE 0 END) AS 'Dez'

FROM cabft WHERE year(DataDocumento) >= 2010
GROUP by year(DataDocumento)
0
Comment
Question by:rflorencio
  • 4
  • 2
6 Comments
 
LVL 74

Expert Comment

by:sdstuber
ID: 37766633
since you are already summing,  I don't think you really need the inner sum too, just put the cases within existing sum case



SELECT   year(datadocumento) AS 'Ano',
         SUM(
             CASE month(datadocumento)
                 WHEN 1
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Jan',
         SUM(
             CASE month(datadocumento)
                 WHEN 2
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Fev',
         SUM(
             CASE month(datadocumento)
                 WHEN 3
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Mar',
         SUM(
             CASE month(datadocumento)
                 WHEN 4
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Abr',
         SUM(
             CASE month(datadocumento)
                 WHEN 5
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Mai',
         SUM(
             CASE month(datadocumento)
                 WHEN 6
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Jun',
         SUM(
             CASE month(datadocumento)
                 WHEN 7
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Jul',
         SUM(
             CASE month(datadocumento)
                 WHEN 8
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Ago',
         SUM(
             CASE month(datadocumento)
                 WHEN 9
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Set',
         SUM(
             CASE month(datadocumento)
                 WHEN 10
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Out',
         SUM(
             CASE month(datadocumento)
                 WHEN 11
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Nov',
         SUM(
             CASE month(datadocumento)
                 WHEN 12
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     - CASE WHEN tipodoc = 'FC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Dez'
    FROM cabft
   WHERE year(datadocumento) >= 2010
GROUP BY year(datadocumento)
0
 

Author Comment

by:rflorencio
ID: 37767235
When run query with:

 CASE WHEN tipodoc = 'NC' AND anulado = 0 THEN valorliquido END

returns zero, but if this line is supressed the value is correct.


SUM(
             CASE month(datadocumento)
                 WHEN 1
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido END
                     -- CASE WHEN tipodoc = 'NC' AND anulado = 0 THEN valorliquido END
                 ELSE
                     0
             END)
             AS 'Jan',
0
 
LVL 74

Expert Comment

by:sdstuber
ID: 37767241
and if it is not commented out, what happens?
0
What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

 

Author Comment

by:rflorencio
ID: 37767300
If is not commented return zero, if commented return the correct value.
0
 
LVL 74

Expert Comment

by:sdstuber
ID: 37767325
I don't understand if it returns 0,  then subtracting it from the other case should return whatever the other case returns.
0
 
LVL 74

Accepted Solution

by:
sdstuber earned 2000 total points
ID: 37767342
ooops! I think I figured it out,  I took the queries too literally


SELECT   year(datadocumento) AS 'Ano',
         SUM(
             CASE month(datadocumento)
                 WHEN 1
                 THEN
                         CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Jan',
         SUM(
             CASE month(datadocumento)
                 WHEN 2
                 THEN
                         CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Fev',
         SUM(
             CASE month(datadocumento)
                 WHEN 3
                 THEN
                         CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Mar',
         SUM(
             CASE month(datadocumento)
                 WHEN 4
                 THEN
                        CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Abr',
         SUM(
             CASE month(datadocumento)
                 WHEN 5
                 THEN
                         CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Mai',
         SUM(
             CASE month(datadocumento)
                 WHEN 6
                 THEN
                         CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Jun',
         SUM(
             CASE month(datadocumento)
                 WHEN 7
                 THEN
                         CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Jul',
         SUM(
             CASE month(datadocumento)
                 WHEN 8
                 THEN
                         CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Ago',
         SUM(
             CASE month(datadocumento)
                 WHEN 9
                 THEN
                        CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Set',
         SUM(
             CASE month(datadocumento)
                 WHEN 10
                 THEN
                      CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Out',
         SUM(
             CASE month(datadocumento)
                 WHEN 11
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Nov',
         SUM(
             CASE month(datadocumento)
                 WHEN 12
                 THEN
                       CASE WHEN tipodoc <> 'NC' AND anulado = 0 THEN valorliquido
                      WHEN tipodoc = 'FC' AND anulado = 0 THEN -1 * valorliquido END
                 ELSE
                     0
             END)
             AS 'Dez'
    FROM cabft
   WHERE year(datadocumento) >= 2010
GROUP BY year(datadocumento)
0

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In part one, we reviewed the prerequisites required for installing SQL Server vNext. In this part we will explore how to install Microsoft's SQL Server on Ubuntu 16.04.
Microsoft Access has a limit of 255 columns in a single table; SQL Server allows tables with over 255 columns, but reading that data is not necessarily simple.  The final solution for this task involved creating a custom text parser and then reading…
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.

971 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question