Autore Topic: Aiutatemi con uno script SQL  (Letto 2425 volte)

Offline ecalogiuri

  • Tech Guru
  • *****
  • Post: 235
  • Karma: +2/-0
    • Mostra profilo
Aiutatemi con uno script SQL
« il: 10 Gennaio 2014, 10:26:50 »
Ciao ragazzi,
mi serve una mano con uno script SQL su microsoft sql server 2005.

Lo script che ha il cliente è questo:

Codice: [Seleziona]
If (Select Count(*) from ARTICOLIPREZZI Where Articolo = 4459 and Listino = 2) = 0
Begin
Update ARTICOLIPREZZI Set Modificato = 1 Where  Articolo = 4459 and Listino = 1
End

Questo va bene, ma io lo devo fare per tutte le righe di ARTICOLIPREZZI  senza filtrare per il codice articolo (quella voce "Articolo = 4459"). Insomma, se NON ESISTE una riga con il campo Listino = 2, allora devo impostare il campo Modificato a 1 SOLO se il campo Listino = 1.

Io non ci sto riuscendo...

Grazie a tutti!!!

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:Aiutatemi con uno script SQL
« Risposta #1 il: 10 Gennaio 2014, 12:01:53 »
se gli togli "articolo  = xxxx" e lasci solamente un listino <> 2?

No, altrimenti zappa via tutto :D

Secondo me bisogna fare una inner join della tabella su se stessa, where t1.articolo = t2.articolo and t1.listino = 1 or t2.listino = 2, in modo da ciclare su tutta la tabella. Però non sono sicuro, il nostro cdimauro è esperto di DB, speriamo che abbia il tempo per risponderti :)

Offline ecalogiuri

  • Tech Guru
  • *****
  • Post: 235
  • Karma: +2/-0
    • Mostra profilo
Re:Aiutatemi con uno script SQL
« Risposta #2 il: 10 Gennaio 2014, 12:14:57 »
se gli togli "articolo  = xxxx" e lasci solamente un listino <> 2?

No, altrimenti zappa via tutto :D

Secondo me bisogna fare una inner join della tabella su se stessa, where t1.articolo = t2.articolo and t1.listino = 1 or t2.listino = 2, in modo da ciclare su tutta la tabella. Però non sono sicuro, il nostro cdimauro è esperto di DB, speriamo che abbia il tempo per risponderti :)

Penso anche io di dover fare una inner join... ma non ci sto riuscendo  :'(

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:Aiutatemi con uno script SQL
« Risposta #3 il: 10 Gennaio 2014, 12:18:33 »
io purtroppo non ti so aiutare, ho solo pochi rudimenti di SQL :(

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:Aiutatemi con uno script SQL
« Risposta #4 il: 10 Gennaio 2014, 17:47:12 »
Potresti provare con la clausola "IN":

Codice: [Seleziona]
--Insomma, se NON ESISTE una riga con il campo Listino = 2, allora devo impostare il campo Modificato a 1 SOLO se il campo Listino = 1.

UPDATE ARTICOLIPREZZI
SET Modificato = 1
WHERE Listino = 1
   AND Articolo NOT IN (SELECT DISTINCT Articolo FROM ARTICOLIPREZZI WHERE Listino = 2)

Ocio che non la ho testata!
Il Distinct non ti serve se ARTICOLIPREZZI può avere solo un valore per ogni articolo (quindi se Articolo è chiave primaria, o in generale è UNIQUE).

È un po' brutta con le due query, ma dovrebbe andare... ovviamente non sapendo lo schema del DB non so se ci sono altre soluzioni.

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:Aiutatemi con uno script SQL
« Risposta #5 il: 10 Gennaio 2014, 18:16:26 »
La tua soluzione è corretta.

Offline ecalogiuri

  • Tech Guru
  • *****
  • Post: 235
  • Karma: +2/-0
    • Mostra profilo
Re:Aiutatemi con uno script SQL
« Risposta #6 il: 12 Gennaio 2014, 09:59:45 »
Grazie ragazzi, dovrebbe andare così. Domani mattina lo provo sull'archivio del cliente e vediamo cosa succede!!! Vi faccio sapere.

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:Aiutatemi con uno script SQL
« Risposta #7 il: 12 Gennaio 2014, 15:29:21 »
Grazie ragazzi, dovrebbe andare così. Domani mattina lo provo sull'archivio del cliente e vediamo cosa succede!!! Vi faccio sapere.

Possibilmente dopo aver fatto un backup. :P

Tags: