23 messaggi dal 01 maggio 2006
Ho una tabella con i seguenti campi valorizzati in questo modo:

ID | Azienda | . Garage . | auto | moto |
1 . | . FIAT . | . garage1 .| . 2 . | . 3 .. |
2 . | . FIAT . | . garage1 .| . 2 . | . 3 .. |
3 . | . ALFA. | . garage1 .| . 2 . | . 3 .. |
3 . | . ALFA. | . garage2 .| . 2 . | . 3 .. |


Dovrei estrarre i record in questo modo:
_________________________________
............. |... garage1 .. | .. garage2 ..|
Azienda | auto .| moto | auto .| moto |
_________________________________
FIAT ..... | ..2 .. | . 3 ... | .. 5 .. | . 8 ... |
ALFA .... | ..5 .. | . 6 ... | .. 9 .. | . 8 ... |

ho fatto una group by:
codice:
SELECT Azienda, SUM(Auto) AS SommaAuto, SUM(Moto) AS SommaMoto FROM TABELLA GROUP BY Azienda"
ma dovrei fare aggiungere una sorta di SUM(Auto (garage1)) AS SommaAutoGarage1 ... ma non so se si possa fare.

p.s.: non fate caso ai numeri estratti, sono errati, non ho fatto la somma.
Modificato da Luca1317 il 04 aprile 2015 07.55 -
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
se ho ben compreso, puoi scrivere
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t1 (
  Id int,
  Azienda varchar(10),
  Garage varchar(10),
  [Auto] int,
  Moto int
  );
INSERT INTO dbo.t1
  VALUES (1, 'FIAT', 'garage1', 2, 3), (2, 'FIAT', 'garage1', 2, 3);
INSERT INTO dbo.t1
  VALUES (3, 'ALFA', 'garage1', 2, 3), (3, 'ALFA', 'garage2', 2, 3);
GO
SELECT t1.Azienda
  , SUM(CASE WHEN t1.Garage = 'garage1' THEN t1.[Auto] ELSE 0 END) AS [garage1-auto]
  , SUM(CASE WHEN t1.Garage = 'garage1' THEN t1.[Moto] ELSE 0 END) AS [garage1-moto]

  , SUM(CASE WHEN t1.Garage = 'garage2' THEN t1.[Auto] ELSE 0 END) AS [garage2-auto]
  , SUM(CASE WHEN t1.Garage = 'garage2' THEN t1.[Moto] ELSE 0 END) AS [garage2-moto]

  FROM dbo.t1 t1
  GROUP BY t1.Azienda
GO
DROP TABLE dbo.t1;
--<-------
Azienda    garage1-auto garage1-moto garage2-auto garage2-moto
---------- ------------ ------------ ------------ ------------
ALFA       2            3            2            3
FIAT       4            6            0            0


saluti e buona Pasqua

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
23 messaggi dal 01 maggio 2006
Grande, grazie mille e auguri anche a te,

P.s.: in access e asp (devo fare la stessa cosa sia in sql che in asp+access) dovrebbe andare bene la parte centrale senza menzionare la tabella prima dei campi, giusto? :
SELECT Azienda
  , SUM(CASE WHEN Garage = 'garage1' THEN [Auto] ELSE 0 END) AS [garage1-auto]
  , SUM(CASE WHEN Garage = 'garage1' THEN [Moto] ELSE 0 END) AS [garage1-moto]

  , SUM(CASE WHEN Garage = 'garage2' THEN [Auto] ELSE 0 END) AS [garage2-auto]
  , SUM(CASE WHEN Garage = 'garage2' THEN [Moto] ELSE 0 END) AS [garage2-moto]

  FROM t1
  GROUP BY Azienda


perchè mi restituisce questo errore:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][Driver ODBC Microsoft Access] Errore di sintassi (operatore mancante) nell'espressione della query 'SUM(CASE WHEN Garage = 'garage1' THEN [Auto] ELSE 0 END)'.

Modificato da Luca1317 il 04 aprile 2015 18.04 -
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
penso Access non supporti il costrutto CASE WHEN .. ELSE END...
potresti pero' provare con una IF ternaria, tipo
IIF( Garage = 'garage1', [Auto], 0)

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
23 messaggi dal 01 maggio 2006
Si, funziona. Grazie mille

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.