Raggruppare risultati su più righe

sabato 14 aprile 2012 - 14.05
Tag Elenco Tags  Windows Server 2003  |  SQL Server 2005

Cracker Profilo | Newbie

Salve a tutti, e complimenti per il forum, che seguo da qualche tempo.

Mi sono deciso ad iscrivermi ed a postare perché ho un problema sul quale stò battendo la testa da qualche giorno, e spero che qualcuno possa aiutarmi.

Premetto che non sono un programmatore, ma cerco di fare del mio meglio...
Parliamo di MS SQL 2005, su Windows Server 2003R2

Sto cercando di scrivere una query che mi estragga i dati, incrociandoli da due tabelle:

PRODORDER, che contiene un elenco di ordini (e dove il numero di ordine è chiave primaria)
BOM, che contiene l'elenco dei particolari e delle operazioni che compongono l'ordine.
Nella seconda tabella possono essere presenti svariati record legati allo stesso ordine. questi record sono caratterizzati da degli ID operazione.

Le tabelle sono strutturate in questo modo:

PRODORDER AUFNR ZSDMODCODE MATNR GAMNG -------- --------------------------------- --------------- ------ 5947133 xxx3yy/zzRabcdefghijklmnop/qrstu aaa.bb.ccc.dd 2 5954096 xxx3yy/zzRdefghijklmnopqrs/tuvwx 12345678 6 5959053 xxx3yy/zzRghijklmnopqrstuv/wxyza 23456789 15 5960458 xxx2yy/zzRjklmnopqrstuvwxy/zabcd 34567890 2 5966239 xxx4yy/zzLmnopqrstuvwxyzab/cdefg eee.ff.ggg.hh 1

BOM AUFNR MATNR POSNR MAKTX -------- ------------ ------ --------------------------------------- 5947133 MARK-03 9999 SEE STD002 5966239 empty 9500 Codice da punzonare: AA/12345678/BBB 5966239 MARK-09 9999 SEE STD002 5954096 empty 9500 Codice da punzonare: PIPPO A12345678 5954096 MARK-24A 9999 SEE STD002 5959053 MARK-26A 9999 SEE STD002 5959053 empty 9500 Codice da punzonare: PIPPO 13579 5960458 MARK-03 9999 SEE STD002

Come si può notare, nella tabella BOM il campo AUFNR non è sempre univoco.
Il record che presenta il campo POSNR = 9999 è sempre presente, in alcuni casi è presente anche quello =9500. (Ovviamente ce ne sono altri, ho semplificato le tabelle al massimo)

Quello che vorrei ottenere è una tabella che mi restituisca una sola riga per ogni ordine.

Sono riuscito, dopo vari tentativi, ad estrarre i codici che hanno sia il record con POSNR uguale a 9500 che 9999.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ottenendo questo risultato:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

In questa tabella mancano tutti i codici che non hanno un record con campo POSNR = 9500, quello che vorrei ottenere è che anche questi comparissero, con i campi ID_BOM e ALTERNATIVE_CODE come NULL.

Una cosa così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

C'è qualcuno che abbia qualche idea su come fare?

boccia75 Profilo | Junior Member

Questa query riporta il risultato che avevi richiesto.
Ciao.




select DISTINCT P.AUFNR as BATCH_ORDER,
B.MATNR as AQST,
SUBSTRING (P.ZSDMODCODE, 4, 1) as BATCH_GROUP,
SUBSTRING (P.ZSDMODCODE, 11, 1) as ROTATION,
P.MATNR as SAUER_CODE,
B.POSNR as ID_BOM,
B2.POSNR as ID2_BOM,
SUBSTRING (B2.MAKTX, 22, 29) as ALTERNATIVE_CODE,
P.GAMNG as QUANTITY,
LEFT (P.ZSDMODCODE,16) as IMMC,
RIGHT (P.ZSDMODCODE,16) as IIMMC,
UPPER (REPLACE (CONVERT (Varchar, GETDATE(), 106), ' ', '/')) as MARKING_DATE


from dbo.PRODORDER as P
INNER JOIN dbo.BOM as B
ON P.AUFNR = B.AUFNR
AND B.matnr<>'empty'
LEFT JOIN dbo.BOM as B2
ON B2.POSNR = '9500'
AND P.AUFNR = B2.AUFNR
where P.AUFNR in (5947133, 5954096, 5959053, 5960458, 5966239)
ORDER BY B.MATNR

Cracker Profilo | Newbie

Ciao Boccia

Grazie mille, ha funzionato perfettamente
Ho solo dovuto aggiungere una condizione alla INNER, perché c'erano anche altri record oltre a quelli con 9500 e 9999, ma in effetti non si capiva molto bene.

Grazie ancora

Luciano
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5