03/12/2025 - DanieleG ha scritto:
Buongiorno a tutto il forum.
Ho una tabella SQL, abbastanza semplice, dove a fronte di un Numero Ordine e Numero Riga, inserisco n record (tanti quanti sono i componenti della ricetta per ottenere il prodotto finito), per cui:
nOrdine- nRiga- ProdottoFinito - Componente1- Quantità1
nOrdine- nRiga- ProdottoFinito - Componente2- Quantità2
nOrdine- nRiga- ProdottoFinito - Componente3- Quantità3
Ora, quello che vorrei ottenere (se possibile) attraverso una query per nOrdine e nRiga, una sola riga che mi riporti oltre ai dati dell'ordine (nOrdine, nRiga, ProdottoFinito), in sequenza, tutti i componenti e le relative quantità:
es
ordine-riga-prodottofinito-componente1-qta1-componente2-qta2......fino alla fine dei componenti.
Secondo voi è possibile ?
Grazie 1000
DG
sono prodotti alimentari?
ho una query che elenca gli ingredienti in ordine di quantità come vuole la normativa. unica eccezione non mi da gli allergeni in grassetto o in maiuscolo.
non sono ferrato in sql server ma la base di partenza dovrebbe essere questa:
WITH ORDINAMENTO AS
(
SELECT
Ordine,
Riga,
Prodotto,
Componente,
Quantità,
ROW_NUMBER() OVER (
PARTITION BY Ordine, Riga
ORDER BY Quantità DESC, Componente
) AS RIGO
FROM TuaTabella
)
DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX);
SELECT @cols = STRING_AGG(
CONCAT(
'[Componente', RIGO, '] = MAX(CASE WHEN RIGO = ', RIGO, ' THEN Componente END), ',
'[Qta', RIGO, '] = MAX(CASE WHEN RIGO = ', RIGO, ' THEN Quantità END)'
)
, ', ')
FROM (SELECT DISTINCT RIGO FROM ORDINAMENTO) AS x;
SET @sql = '
SELECT Ordine, Riga, Prodotto, ' + @cols + '
FROM ORDINAMENTO
GROUP BY Ordine, Riga, Prodotto
ORDER BY Ordine, Riga;
';
EXEC sp_executesql @sql;
ordina i prodotti in modo decrescente e li mette in riga per n ordini ed n righe. (si usava per creare la lista ingredienti nelle etichette)
alla fine potresti leggere gli allergeni da una tabella che contiene gli elementi considerati allergeni, e trasformare in minuscolo quelli che non sono presenti nella tabella allergeni e in maiuscolo quelli che invece sono presenti. la normativa non chiede la quantità (al massimo la %) ma non è obbligatoria (io l'ho messa ma dovrebbe essere espressa in %).
gli obblighi sono la lista ingredienti decrescente e il maiuscolo o grassetto per gli allergeni.
un altro obbligo è l'elenco degli ingredienti dei lavorati. se usi marmellata va scritto marmellata(ingredienti della marmellata), se usi maionese va scritto maionese(ingredienti della maionese) in questi casi devi scrivere il valore % del semilavorato.
questa riga per intenderci: '[Qta', RIGO, '] = MAX(CASE WHEN RIGO = ', RIGO, ' THEN Quantità END)' riporta le quantità
la sp che ti lascio è obsoleta per la normativa ma qualcuno potrà sicuramente darti delle dritte per aggiornarla. io uso mysql di più non so dirti.
dovresti fare la stessa procedura per elencare solo gli allergeni presenti scritti in grassetto o maiuscolo
sorvolo sugli OGM che non ne usiamo.