Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    SQL Server 2008 -> ACCESS ... problemi con tabella PIVOT

    Ciao tutti ... sto' impazzendo
    Ho una query SQL (perfettamente funzionante su SQL Svr 2008) questa :
    'SELECT [5],[10],[20],[50],[100],[200],[500] FROM (SELECT denom, num_good FROM machine_dates where id_macchina='DWC11045' and data_rif='2013-10-10') as SourceTable
    PIVOT (
    SUM(num_good)
    FOR denom IN ([5], [10], [20], [50], [100], [200],[500] )
    ) AS PivotTable;
    Questa tabella produce un output dei diversi tagli (appunto 5,10,20,50,100,200,500) e fą una ... SUM valori riportati nel medesimo campo "num_good". Ho adattato la query per access in questo modo:
    SELECT [5],[10],[20],[50],[100],[200],[500] FROM
    (SELECT denom, num_good FROM machine_dates where id_macchina=''DWC11045'' and data_rif=#10-10-2013#) as SourceTable
    PIVOT (
    SUM(num_good)
    FOR denom IN ([5], [10], [20], [50], [100], [200],[500] )
    ) AS PivotTable;
    Ma continua a darmi errore di sintassi nella preposizione FROM !!!!
    C'e' qualche anima pia che riesce a darmi una mano ???

    Ciao Filippo

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da filippo_260367 Visualizza il messaggio
    Ma continua a darmi errore di sintassi
    Non mi sono soffermato sul significato della query.

    ma per la sintassi direi che:

    ''DWC11045'' lo hai racchiusi fra doppi apici nel senso che hai battuti 2 volte l'apice singolo
    invece devi batter 1 sola volta il doppio apice ( sopra il tasto 2 "DWC11045" )

    #10-10-2013# Prova a scriverlo #10/10/2013#

    FOR denom IN (..... non lo ho capito


    Magari passaci l'elenco campi della tabella che lo capiamo insieme al significato della query

    .
    Ultima modifica di nman; 14-11-2013 a 08:07

  3. #3
    le pivot in sqlserver e in access sono diverse. per le pivot in access usa lo strumento di creazione *dentro* access

  4. #4
    Quote Originariamente inviata da nman Visualizza il messaggio
    Non mi sono soffermato sul significato della query.

    ma per la sintassi direi che:

    ''DWC11045'' lo hai racchiusi fra doppi apici nel senso che hai battuti 2 volte l'apice singolo
    invece devi batter 1 sola volta il doppio apice ( sopra il tasto 2 "DWC11045" )

    #10-10-2013# Prova a scriverlo #10/10/2013#

    FOR denom IN (..... non lo ho capito


    Magari passaci l'elenco campi della tabella che lo capiamo insieme al significato della query

    .
    Innanzitutto Grazie per la risposta :-)
    ho battuto DWC11045 tra doppi apici perchč io sto' usando Delphi per programmare, e siccome si tratta di un campo stringa l' ho dovuto battere due volte(l'apice) in modo che la stringa sql definitiva avesse il campo tra apici (singoli) come prevede la sintassi di un campo stringa in un DB.
    Ho provato a cambiare il formato data come hai suggerito ... ma niente
    Cerchero' di spiegarti campi della tabella per farti/vi capire cosa voglio ottenere (ma che ripeto .. con SQL SVr funziona alla grande)
    La tabella "machine_dates" contiene questi campi:
    id_macchina (testo - 15 car - NON E' UNIVOCO) ... appunto DWC11045
    "denom" (testo - 3 caratteri): in questo campo posso trovare SOLO uno di questi valori
    NOTA: IL Campo potrebbe anche essere vuoto:
    5
    10
    20
    50
    100
    200
    500
    (ho dovuto usare un campo stringa anzichč intero, per modivi di compatibilitą.

    data_rif : campo data
    num_good : numerico -

    ed altri campi che comunque non inclusi nella sql (non interessano).
    Natura del problema (da risolvere):
    Ottenere per ogni id_macchina (selezionato) la somma del campo num_good per ognuno dei campi "denom" valido.
    In pratica alla fine avro' per ogni id_macchina avro' la singola somma di tutti i camppi denominato [5] [10] etc etc , ossia tutti valori validi trovati all'interno del DB
    E' un po' un casino, ma con la sql scritta ottenevo quello che mi serve

    Grazie e ciao

    Fil

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    se si tratta di una Pivot in cui hao la certezza "matematica" che il valore di "denom" č limitato a quei 7 valori che hai citato allora potresti fare una piu banale SELECT
    codice:
    SELECT 
    machine_dates.id_macchina, 
    machine_dates.data_rif, 
    Sum(IIf(machine_dates.denom="5",machine_dates.num_good,0)) AS t005, Sum(IIf(machine_dates.denom="10",machine_dates.num_good,0)) AS t010, Sum(IIf(machine_dates.denom="20",machine_dates.num_good,0)) AS t020, Sum(IIf(machine_dates.denom="50",machine_dates.num_good,0)) AS t050, Sum(IIf(machine_dates.denom="100",machine_dates.num_good,0)) AS t100, Sum(IIf(machine_dates.denom="200",machine_dates.num_good,0)) AS t200, Sum(IIf(machine_dates.denom="500",machine_dates.num_good,0)) AS t500
    FROM 
    machine_dates
    GROUP BY 
    machine_dates.id_macchina, 
    machine_dates.data_rif
    ;
    diversamente si puo fare anche la pivot come vorresti
    Ma adesso il dovere mi chiama ....

    Facci sapere

  6. #6
    Quote Originariamente inviata da nman Visualizza il messaggio
    se si tratta di una Pivot in cui hao la certezza "matematica" che il valore di "denom" č limitato a quei 7 valori che hai citato allora potresti fare una piu banale SELECT
    .....
    .....
    diversamente si puo fare anche la pivot come vorresti
    Ma adesso il dovere mi chiama ....

    Facci sapere
    azzz ....della "banale Select"

    E' una strada diversa ... ma funziona perfettamente ... logicamente ho fatto qualche modifica per adattarla alle mie esigenza (l 'ho resa dinamica aggiungendo WHERE e AND) e vą alla grande !!!
    Non chiedevo di meglio

    Grazie mille per l'aiuto !!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.