Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 569
  • Last Modified:

Sql Server query conditional SUM

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
rflorencio
Asked:
rflorencio
  • 4
  • 2
1 Solution
 
sdstuberCommented:
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
 
rflorencioAuthor Commented:
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
 
sdstuberCommented:
and if it is not commented out, what happens?
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
rflorencioAuthor Commented:
If is not commented return zero, if commented return the correct value.
0
 
sdstuberCommented:
I don't understand if it returns 0,  then subtracting it from the other case should return whatever the other case returns.
0
 
sdstuberCommented:
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

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now