Avatar billede FewCastle Praktikant
12. november 2014 - 13:13 Der er 7 kommentarer og
1 løsning

Udelukke data i udtræk

Har lidt problemer med mit udtræk.

Jeg har denne sql-sætning som laver summering på alle Customer ud fra nedenstående krav
SELECT DISTINCT BV.[Code]
      ,count(C.[Potential Business Volume]) AS AntalTotal
  FROM [LF_Drift].[dbo].[x$Business Volume] AS BV INNER JOIN [LF_Drift].[dbo].[Lx$Customer] AS C
        ON BV.[Code] = C.[Potential Business Volume]
          INNER JOIN [LF_Drift].[dbo].[x$User Setup] AS US
        ON C.[Salesperson Code] = us.[User ID]
  GROUP BY BV.Code, C.[Potential Business Volume]
  ORDER BY BV.Code
  GO

Sql laver følgende visning:
A 105
B 324
C 981
D 858
E 35821
X 320

Ekstra funktion:
Det jeg gerne vil have er, at når BV.[Code] kommer til E skal den tjekke om der står A, B, C eller D i feltet C.[Current Business Volume].
Hvis True så skal den tælles med i sum ellers ikke.

Håber det er til at forstå.
På forhånd tak.
Avatar billede terry Ekspert
12. november 2014 - 14:56 #1
you need a where clause, something like this I think

WHERE (BV.[Code] <> 'E') OR (BV.[Code] = 'E' AND C.[Current Business Volume] = True)
Avatar billede FewCastle Praktikant
12. november 2014 - 15:04 #2
Den kommer med følgende fejl:
Invalid column name 'True'

Lige en tanke, skal der bruges noget case oppe i Count?
Avatar billede terry Ekspert
12. november 2014 - 15:54 #3
try changing True to 1
Should not need a case
Avatar billede terry Ekspert
12. november 2014 - 16:06 #4
Sorry, I haven't read your question correctly


WHERE (BV.[Code] <> 'E') OR (BV.[Code] = 'E' AND C.[Current Business Volume] IN('A', 'B', 'C', 'D'))
Avatar billede FewCastle Praktikant
13. november 2014 - 10:00 #5
Kanon, så virker det, skal lige teste om output giver det rigtige resultat.

Jeg har så lige et spørgsmål mere. Håber du er frisk på det.
Udover at få AntalTotal for hele huset, vil jeg ligeledes gerne have total på afdelingerne.

SQL ser således ud:
SELECT DISTINCT BV.[Code]
      ,count(C.[Potential Business Volume]) AS AntalTotal
      ,(SELECT COUNT(c1.[Potential Business Volume])
            FROM [LF_Drift].[dbo].[Leasing Fyn$Customer] AS C1
            INNER JOIN [LF_Drift].[dbo].[Leasing Fyn$User Setup] AS US
            ON C1.[Salesperson Code] = us.[User ID]
            WHERE us.[Department]='FORHANDLER' AND C1.[Potential Business Volume]=BV.Code
      ) AS AntalForhandler
      ,(SELECT COUNT(c1.[Potential Business Volume])
            FROM [LF_Drift].[dbo].[Leasing Fyn$Customer] AS C1
            INNER JOIN [LF_Drift].[dbo].[Leasing Fyn$User Setup] AS US
            ON C1.[Salesperson Code] = us.[User ID]
            WHERE us.[Department]='LANDBRUG' AND C1.[Potential Business Volume]=BV.Code
      ) AS AntalLandbrug
      ,(SELECT COUNT(c1.[Potential Business Volume])
            FROM [LF_Drift].[dbo].[Leasing Fyn$Customer] AS C1
            INNER JOIN [LF_Drift].[dbo].[Leasing Fyn$User Setup] AS US
            ON C1.[Salesperson Code] = us.[User ID]
            WHERE us.[Department]='TRANSPORT' AND C1.[Potential Business Volume]=BV.Code
      ) AS AntalTransport
      ,(SELECT COUNT(c1.[Potential Business Volume])
            FROM [LF_Drift].[dbo].[Leasing Fyn$Customer] AS C1
            INNER JOIN [LF_Drift].[dbo].[Leasing Fyn$User Setup] AS US
            ON C1.[Salesperson Code] = us.[User ID]
            WHERE us.[Department]='KREDIT' AND C1.[Potential Business Volume]=BV.Code
      ) AS AntalKredit
  FROM [LF_Drift].[dbo].[Leasing Fyn$Business Volume] AS BV INNER JOIN [LF_Drift].[dbo].[Leasing Fyn$Customer] AS C
        ON BV.[Code] = C.[Potential Business Volume]
          INNER JOIN [LF_Drift].[dbo].[Leasing Fyn$User Setup] AS US
        ON C.[Salesperson Code] = us.[User ID]
  WHERE (BV.[Code] <> 'E  NEUTRAL') OR (BV.[Code] = 'E  NEUTRAL' AND C.[Current Business Volume] IN('A  + 5 MIO', 'B  2 - 5 MIO', 'C  0,5 - 2 MIO', 'D  - 0,5 MIO'))
  GROUP BY BV.Code, C.[Potential Business Volume]
  ORDER BY BV.Code


Som du kan se har jeg sat din WHERE sætning ind til sidst. Udover det har jeg så sat en SELECT COUNT ind for hver afdeling. På hver afdeling vil jeg også gerne have sat din WHERE sætning ind. Jeg har prøvet mig lidt frem, men det giver lidt kvaler. Håber du også har en løsning på den.
Avatar billede terry Ekspert
13. november 2014 - 12:11 #6
First, I wasnt aware that the SQL gave a total for "hele huset", I just helped answer your question:
"Det jeg gerne vil have er, at når BV.[Code] kommer til E skal den tjekke om der står A, B, C eller D i feltet C.[Current Business Volume].
Hvis True så skal den tælles med i sum ellers ikke."

Actually you say "Jeg har denne sql-sætning som laver summering på alle Customer" = ALL CUSTOMERS!!

And not having any knowledge of you tables/relationships it isnt so easy to help you with this extra question :-(

If we assume there is more than one department (afdeling) then I would suggest making another query. Your first query is grouping on BV.Code, C.[Potential Business Volume] and giving a count of these (AntalTotal). To give a count on Department would require you to group on department level which would effect AntalTotal.
Avatar billede FewCastle Praktikant
13. november 2014 - 13:16 #7
Når jeg skal finde total for hver afdeling, så skal jeg vel også have dem grupperet på BV.Code, for det er den gruppering jeg skal bruge. Det skal bruges i et samlet view, så mit output ser ud således:

Code  AntalTotal  AForhandler  ALandbrug  ATransport  AKredit
A        105          25          35          46        0
B        324          44        175        105        0
C        981          36        596        349        0
D        858          11        437        412        0
E      3018      22461        7662        5673        24
X        320          18        127        173        2

Ved ikke om det kommer til at stå under hinanden når jeg trykker opret. Efter jeg har sat din where sætning ind passer antal for afdelingerne selvfølgelig ikke mere. Din where sætning er tjekket op imod vores database og det passer :)
Avatar billede terry Ekspert
13. november 2014 - 17:52 #8
as mention, I have no knowledge of your database so its very difficult to say what you need to group on, but if we assume that the first query is summing all "afdelinger" to give AntalTotal then I would think it very likely that you have to have another field in the group
EG: GROUP BY BV.Code, C.Afdeling, C.[Potential Business Volume]
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester