2012-11-05 7 views
6

Ho problemi con un sistema che mio padre utilizza per segnalare alla sua azienda. Non l'ho costruito ma sto facendo del mio meglio per coprirmi la testa. È ASP e non ne sono molto esperto (o scrivo sql per quella materia).Problemi combinando 3 elementi di tabelle SQL diversi e ottenendo la somma

Fondamentalmente ho tre tabelle con cui sto lavorando, Item, ItemHistory e Devices. In tali tabelle quello che sto cercando di fare è

  • ottenere gli elementi che un utente ha lavorato tramite la colonna "numero di serie" dalla tabella "elemento Cronologia"
  • Confronti che il numero di serie per la colonna "numero di serie" nella tabella "Articolo" per ottenere il tipo di dispositivo (dalla colonna del dispositivo)
  • Utilizzare il tipo di dispositivo per prelevare un valore di numero predeterminato dalla colonna "punti" nella tabella "Dispositivi"
  • Memorizzare il valore e aggiungerlo a qualsiasi altro valore che è stato ritirato dalla query, quindi visualizza il totale.

* Vedere Aggiornamento *

Come si può vedere, sarebbe stato molto più facile se il tipo di dispositivo è stato incluso nella tabella ItemHistory, ma non lo era. Ho provato ad unire i tavoli, ma continuo a ricevere errori (che è dalla mia mancanza di conoscenza sono abbastanza certa). La query è per intervallo di date e utente (dalla tabella ItemHistory), ma penso di averlo capito. Non riesco proprio a far riferimento a tutti i tavoli e ad aggiungere i "punti" insieme.

Qualsiasi aiuto è molto apprezzato! Se hai bisogno di ulteriori informazioni fammi sapere. Grazie in anticipo.


Aggiornamento

Quindi, in pratica quello che sto avendo problemi con la società è che la query continua a tornare con "BOF o EOF è vero, o il record corrente è stato eliminato. Operazione richiesta richiede una corrente disco." che penso sia stato causato perché sta semplicemente aggiungendo i numeri nella colonna dei punti.

Penso che il problema con la mia ultima domanda è che ho fatto sembrare che ci fossero "Punti" per ogni dispositivo, ma in realtà ci sono un certo numero di dispositivi (diciamo cinque) e potrebbero esserci più numeri di serie tutti puntando su un dispositivo. Penso che questo sia il punto in cui la query si trova nei guai (ma potrei sbagliarmi). Inoltre, la mia istruzione sql sembra esattamente uguale a quella di un littlebobbytable pubblicato qui sotto, tranne che per le mie variabili aggiunte.

Ecco come appare il database.

Tabella ItemHistory

Date  | SerialNumber | DeviceType | User 
----------|--------------|-------------|------- 
11/1/12 | 123-456-789 |  NULL | Bill 
11/1/12 | 456-123-987 |  NULL | Bill 
11/1/12 | 987-654-321 |  NULL | Bill 
11/1/12 | 216-897-631 |  NULL | Bill 
11/1/12 | 874-547-277 |  NULL | Bill 

SerialNumber | DeviceType 
    -------------|------------- 
    123-456-789 | Device1 
    456-123-987 | Device2 
    987-654-321 | Device3 
    216-897-631 | Device1 
    874-547-277 | Device2 

Devices Tabella articolo Tabella

Device | Points 
----------|---------- 
    Device1 | 20 
    Device2 | 25 
    Device3 | 40 

E che spero l'uscita sarà è

User | Points 
--------|---------- 
    Bill | 130 
+3

+1: La domanda in sé non è né nuova né innovativa su questo sito. MA hai fatto un bel po 'di sforzi fin dall'inizio per portare esempi chiari e una buona formattazione. Mantenere il buono stile. –

risposta

1

È possibile sommare i punti insieme, e il gruppo da ID utente:

SELECT [User], SUM(Points) AS Points 
FROM ItemHistory IH 
INNER JOIN Item I ON IH.SerialNumber = I.SerialNumber 
INNER JOIN Devices D ON I.DeviceType = D.Device 
WHERE IH.[Date] = @YourDateVariable 
GROUP BY [User] 
+0

Fantastico, grazie per il tuo aiuto! Ora sto correndo in un errore "] Riferimento di colonna non univoco: User. Posso solo supporre che sia perché c'è una colonna User nella tabella" Items "(la persona che inizialmente l'ha inserita nel sistema) e una in the ItemHistory Non l'ho incluso nella mia domanda iniziale perché non pensavo che avrebbe avuto molta importanza. C'è qualcosa che posso fare per risolvere questo problema? A parte cambiare i nomi delle colonne, intendo: – willku

+0

Certo, puoi usare il nome della tabella (o in questo caso l'alias) per fare riferimento a un campo specifico [[Utente] '. Puoi fare 'SELECT I. [Utente]' e 'GROUP BY I. [Utente]'. – LittleBobbyTables

+0

So che è stato un mentre, si spera, puoi aiutarmi ancora, ho dovuto metterlo in attesa e sto solo ora rivisitandolo e penso che mi sto avvicinando Il problema che sto avendo ora è che la query è solo aggiungendo i punti nella colonna punti , invece di guardare il primo numero di serie, trovare il dispositivo, quindi ottenere i punti, andare al secondo numero seriale, trovare il devi ce, quindi ottenendo i punti per esso, ecc. e infine aggiungendo quei due (o più) valori insieme. Alcuni numeri seriali faranno riferimento allo stesso dispositivo più volte. Ho provato tutto quello che riesco a pensare. Grazie! – willku