[SQL] Query probleem SUM, GROUP BY

Pagina: 1
Acties:

  • T-Blizzard
  • Registratie: Juni 2001
  • Laatst online: 08:52
Ik ben nu al een paar dagen aan het 'rommelen' om een query goed opgebouwd te krijgen, maar tot nu toe kan ik niet echt een goed oplossing vinden.

ik wil data verzamelen uit 2 tabellen :

Item -- ItemVat

De Item tabel bevat o.a. een Price en een VatID, de Vat tabel bevat uiteraard het b.t.w. tarief.
Nu wil ik in de result van mijn stored procedure de prijs returnen inclusief de b.t.w.

SQL:
1
2
3
SELECT Item.Name, Cast(sum(round(Item.Price + ((Item.Price * ItemVat.Tax) / 100),2)) as money) AS PriceInc 
FROM Item INNER JOIN ItemVat ON Item.VatID = ItemVat.ID 
GROUP BY Item.Name


Op het moment dat ik dit dus in mijn stored procedure gooi gaat dit opzich oke :) Uiteraard wil ik meer wil returnen dan dat. Ik moet dus GROEP BY gaan gebruiken. Probleem is dus dat er text en nvarchar types tussen zitten die niet te groeperen zijn... |:(

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 15:22

Maasluip

Frontpage Admin

Kabbelend watertje

Wat is dan het probleem met die andere velden? Alles wat je in de group by gooit wordt gegroepeerd als het gelijk is. Ik ben nog geen datatype tegengekomen waar dat problemen bij oplevert.

Signatures zijn voor boomers.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Maasluip schreef op dinsdag 24 juli 2007 @ 12:07:
Wat is dan het probleem met die andere velden? Alles wat je in de group by gooit wordt gegroepeerd als het gelijk is. Ik ben nog geen datatype tegengekomen waar dat problemen bij oplevert.
Text/Memo :Y)
T-Blizzard schreef op dinsdag 24 juli 2007 @ 12:01:
Probleem is dus dat er text en nvarchar types tussen zitten die niet te groeperen zijn... |:(
Overigens: Waar hoort mijn topic?

SEA >> PRG

[ Voor 36% gewijzigd door RobIII op 24-07-2007 12:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • T-Blizzard
  • Registratie: Juni 2001
  • Laatst online: 08:52
Maasluip schreef op dinsdag 24 juli 2007 @ 12:07:
Wat is dan het probleem met die andere velden? Alles wat je in de group by gooit wordt gegroepeerd als het gelijk is. Ik ben nog geen datatype tegengekomen waar dat problemen bij oplevert.
code:
1
2
Msg 306, Level 16, State 2, Line 1
The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 15:22

Maasluip

Frontpage Admin

Kabbelend watertje

Nog nooit meegemaakt dus. Welke database doet dat dan? Access kent wel een memo veld maar daar kun je naar hartelust op grouperen.

Kun je de velden niet converteren naar char of zo? to_char in PL/SQL of misschien CSTR als het in Access is?

Signatures zijn voor boomers.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Maasluip schreef op dinsdag 24 juli 2007 @ 12:25:
Nog nooit meegemaakt dus. Welke database doet dat dan?
Sowieso (uit mijn hoofd) MSSQL, MySQL, Postgres en Oracle.
Maasluip schreef op dinsdag 24 juli 2007 @ 12:25:
Access kent wel een memo veld maar daar kun je naar hartelust op grouperen.
Nu kun je dan ook betwisten of Access mag doorgaan voor een DB an-sich ;) :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 15:22

Maasluip

Frontpage Admin

Kabbelend watertje

RobIII schreef op dinsdag 24 juli 2007 @ 12:27:
[...]


Nu kun je dan ook betwisten of Access mag doorgaan voor een DB an-sich ;) :P
offtopic:
Zijn er aanwijzingen dat Access dat niet is? Op bepaalde gebieden een beperkte misschien, maar hoe moet het anders heten?

Signatures zijn voor boomers.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Maasluip schreef op dinsdag 24 juli 2007 @ 12:32:
[...]
offtopic:
Zijn er aanwijzingen dat Access dat niet is? Op bepaalde gebieden een beperkte misschien, maar hoe moet het anders heten?
offtopic:
Joh, ik grapte maar wat hoor. Wilde niemand op z'n tenen trappen ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • T-Blizzard
  • Registratie: Juni 2001
  • Laatst online: 08:52
Sorry het gaat dus om MSSQL 2000 :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Was het niet zo dat van de text/blob datatypes alleen de eerste 255 bytes worden bekeken bij vergelijking in Access? Misschien dat dat hier opspeelt? ...als je tenminste Access gebruikt, want dat moeten we eerst eens weten. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 20:47
Je kunt casten naar varchar of nvarchar, maar dan krijg je alleen de eerste 4000/8000 tekens terug.

Je kunt het text veld weglaten uit deze query, en dan een select name, ... from (select ... group by id) as query inner join Item on query.id = item.id

Ik vraag me trouwens af of het noodzakelijk is dat de naam van een item van het type text is.

  • T-Blizzard
  • Registratie: Juni 2001
  • Laatst online: 08:52
_js_ schreef op dinsdag 24 juli 2007 @ 13:40:
Je kunt casten naar varchar of nvarchar, maar dan krijg je alleen de eerste 4000/8000 tekens terug.

Je kunt het text veld weglaten uit deze query, en dan een select name, ... from (select ... group by id) as query inner join Item on query.id = item.id

Ik vraag me trouwens af of het noodzakelijk is dat de naam van een item van het type text is.
die naam was als voorbeeld :) heb o.a. ook een omschrijving van het type text.

  • T-Blizzard
  • Registratie: Juni 2001
  • Laatst online: 08:52
nou lijk nu wat gefabriekt te hebben wat werkt, ook al heb ik altijd geleerd subqueries te vermijden...
O-)

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT     
    Z.ID, Z.Description, Z.Name
  
    (SELECT Cast(sum(round(Item.Price + ((Item.Price * ItemVat.Tax) / 100),2)) as money) AS PriceInc 
     FROM Item INNER JOIN ItemVat ON Item.VatID = ItemVat.ID 
     WHERE Item.ID = Z.ID) AS PriceInc

FROM        
     Item Z 

WHERE
    (Z.ModuleID = @ModuleID) 
Pagina: 1