[MSSQL 2005] Geavanceerde query

Pagina: 1
Acties:

  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Mensen, Aangezien ik nog niet lang met SQL bezig ben begrijp ik nog niet alles.

Het probleem
Ik wil een veld (tbl_App.fld_App_Naam) weergeven maar dan krijg ik de volgende error:
code:
1
Column 'tbl_App.fld_App_Naam' is invalid in the select list because it is not contained in either an aggregate function or the GROEP BY


Wie kan mij uitleggen waardoor deze fout ontstaat en of er een oplossing voor is?

Het gaat om de volgende query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
  tbl_App.fld_App_Id AS Id, 
  tbl_App.fld_App_Pos_X AS X, 
  tbl_App.fld_App_Pos_Y AS Y, 
  tbl_App_Type.fld_Type_Naam AS Type, 
  tbl_App.fld_App_Connection AS Connectie, 
  COUNT_BIG(tbl_Tickets.vld_Id) AS Tickets
FROM
  tbl_App LEFT OUTER JOIN
    tbl_Tickets ON tbl_App.fld_App_Id = tbl_Tickets.vld_Apparaat LEFT OUTER JOIN
      tbl_App_Type ON tbl_App.fld_App_Type_Id = tbl_App_Type.fld_App_Type_Id
WHERE     
  (tbl_App.fld_App_Klant_Id = '1')
GROUP BY 
  tbl_App.fld_App_Id, 
  tbl_App.fld_App_Pos_X, 
  tbl_App.fld_App_Pos_Y, 
  tbl_App_Type.fld_Type_Naam, 
  tbl_App.fld_App_Connection


Deze word uitgevoerd op de volgende tabellen:
tbl_AppDe kollomen hebben als prefix: tbl_App_ maar anders werd de tabel te breed
- Id
- Klant_Id
- Type_Id
- Naam
- Pos_X
- Pos_Y
- Connection

tbl_App_TypePrefix: fld_Type_
- Id
- Naam
- Omschrijving
- Vervallen

tbl_TicketsPrefix: vld_
- Id
- Onderwerp
- Omschrijving
- Status
- aangemaakt
- afgehandeld
- Type
- Apparaat
- Gebruiker
- Geplande_Datum
- Urgentie

De query maakt dus een koppeling tussen
- tbl_App.fld_App_Id en tbl_Tickets.vld_Apparaat
- tbl_App.fld_App_Type_Id en tbl_App_Type.fld_App_Id

Het resultaat van deze query zijnde volgende kolommen:
- Id
- X
- Y
- Type
- Connectie
- Klant
- Ticket

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Als je GROUP BY gebruikt moeten alle velden die in je SELECT gedeelte staan ook in het GROUP BY gedeelte staan OF onderdeel van een aggregatie-functie (SUM, MIN, MAX etc) zijn.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Jah dat klopt maar als ik dat veld in de GROUP BY zet dan zegtie dat velden van het type nText, nVarchar niet in een GROUP BY mogen, BEHALVE als er een = of LIKE in voorkomt. Maar voeg ik één van de 2 toe dan zegtie weer dat hij geen = of LIKE mag bevatten.

Ik ben hier al de hele middag mee bezig dus het wordt hoe langer hoe lastiger er nog zelf uit te komen.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:51
LangeJanneman schreef op vrijdag 13 juli 2007 @ 15:59:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
  tbl_App.fld_App_Id AS Id, 
  tbl_App.fld_App_Pos_X AS X, 
  tbl_App.fld_App_Pos_Y AS Y, 
  tbl_App_Type.fld_Type_Naam AS Type, 
  tbl_App.fld_App_Connection AS Connectie, 
  COUNT_BIG(tbl_Tickets.vld_Id) AS Tickets
FROM
  tbl_App LEFT OUTER JOIN
    tbl_Tickets ON tbl_App.fld_App_Id = tbl_Tickets.vld_Apparaat LEFT OUTER JOIN
      tbl_App_Type ON tbl_App.fld_App_Type_Id = tbl_App_Type.fld_App_Type_Id
WHERE     
  (tbl_App.fld_App_Klant_Id = '1')
GROUP BY 
  tbl_App.fld_App_Id, 
  tbl_App.fld_App_Pos_X, 
  tbl_App.fld_App_Pos_Y, 
  tbl_App_Type.fld_Type_Naam, 
  tbl_App.fld_App_Connection
Omg! :X :X Ik krijg pijn in m'n hoofd van alle tbl_ en fld_'s! Het is offtopic, dat weet ik, maar ik wil je toch aanraden om er mee te stoppen. Of je moet het leuk vinden om in een (toch niet al te grote) query en 18 keer tbl_, 14 keer fld en maar liefst 57 _ 's te typen... (Is je _ nog niet versleten? :*) )

Het is:
a Niet leesbaar
b Vervelend werken
c Totaal overbodig

Edit: lees nu m'n post terug en hij klinkt vrij negatief. Is niet zo bedoeld, integendeel zelfs.

[ Voor 5% gewijzigd door sig69 op 13-07-2007 16:17 ]

Roomba E5 te koop


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
nText mag inderdaad niet, daar zul je omheen moeten werken met een andere query. Weet je zeker dat je nText nodig hebt? Wil je echt meer dan 8000 (of 4000 uicode) karakters opslaan?

nVarchar moet volgens mij geen probleem zijn, weet je zeker dat 'ie daar ook over zeurt?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Jah daar zeurt hij over. En het probleem is dat ik als gewone tekst output dus een subquery gaat niet lukken ivm sqldatareader in ASP.

Maar ik ben nog vanalles aan het proberen misschien dat ik zo een datatype heb die wel kan voor mij en die wel accepteerd.

@sig69: Ik ben het volledig met je eens maarja, op stage moet je een beetje gehoorzamen wil je slagen en de chef wil persé alle prefixen ervoor hebben (btw.. vanaf het begin al de mist mee ingegaan.)

[ Voor 16% gewijzigd door LangeJanneman op 13-07-2007 16:28 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
post eens de hele foute query, met de exacte foutmelding

Oops! Google Chrome could not find www.rijks%20museum.nl


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Sorry, Je had gelijk. Ik heb voor de zekerheid nog een keer het veld omgezet naar varchar en jah hoor.. Dát was het probleem.

Hartelijk dank voor je hulp.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

En alsnog een move naar PRG aangezien het hier de query betreft en niet de instellingen/installatie van sql server.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1