Passa al contenuto principale

DEFQUERYCTE

31.1DesktopWeb

Permette di inizializzare una query di tipo CTE per la sua successiva definizione.
Deve essere collegata alla query principale definita in precedenza tramite la specifica @DEFQUERY.

Parametri

ParametroDefinizioneI/OInformazioniVersione traduttoreSMP
IDQUERYLongOUTDesktopWeb
IDQUERYPADRELongINDesktopWeb
QUERYClasse BCQUERYRef31.3DesktopWeb
QUERYPADREClasse BCQUERYRef31.3DesktopWeb
ELIMINADUPLICATIInteroINDesktopWeb
MAXRECORDLongINDesktopWeb
MULTIGRUPPOInteroINDesktopWeb
MULTISTAZIONEInteroINDesktop
MULTIDOMINIOInteroINDesktopWeb
VINCOLIInteroINDesktopWeb
ALIASStringaINObbligatorioDesktopWeb
PARTEEnumerazioneINDesktopWeb
NOLOCKInteroINValore non necessario31.2Desktop
ERROREInteroINDesktopWeb

IDQUERY

LongOUTOutputValore non necessarioValore non necessarioDesktopWeb

Identificatore della query restituito dalla specifica DEFQUERY

IDQUERYPADRE

LongINInputValore non necessarioValore non necessarioDesktopWeb

Indica l'identificatore della query esterna che contiene la subquery (o sottoquery), da usarsi nel richiamo delle successive specifiche di definizione della subquery.

QUERY

31.3Classe BCQUERYRefReferenzaValore non necessarioValore non necessarioDesktopWeb

Identificatore della query, da usarsi nel richiamo delle successive specifiche di definizione o di esecuzione della query.

QUERYPADRE

31.3Classe BCQUERYRefReferenzaValore non necessarioValore non necessarioDesktopWeb

Identificatore della query esterna che contiene questa query

ELIMINADUPLICATI

InteroINInputValore non necessarioValore non necessarioDesktopWeb

Indica se eliminare dal risultato della query le eventuali righe duplicate (con stessi valori su tutte le colonne). Corrisponde all'applicazione della clausola DISTINCT al comando SQL della query

Parametro con valori ammessi, si possono utilizzare i seguenti valori:

ValoreDescrizione
0No
1Si

MAXRECORD

LongINInputValore non necessarioValore non necessarioDesktopWeb

Definisce il numero di record da leggere dall'insieme dei record restituiti dalla query. Corrisponde all'applicazione della clausola TOP 'MaxRecord'. Se non indicato verranno letti tutti i record

MULTIGRUPPO

InteroINInputValore non necessarioValore non necessarioDesktopWeb

Indica se applicare o meno il filtro automatico sul campo GR (DBGruppo) sulle tabelle di gruppo nella query

Parametro con valori ammessi, si possono utilizzare i seguenti valori:

ValoreDescrizione
0Viene applicato il filtro sul campo gruppo per le tabelle che lo prevedono
1NON viene applicato il filtro sul campo gruppo per le tabelle che lo prevedono (Legge tutto)

MULTISTAZIONE

InteroINInputValore non necessarioValore non necessarioDesktop

Indica se applicare o meno il filtro automatico sul campo WS (DBStazione) sulle tabelle di stazione nella query

Parametro con valori ammessi, si possono utilizzare i seguenti valori:

ValoreDescrizione
0La query inserisce il filtro sul campo stazione per le tabelle che lo prevedono
1La query NON inserisce il filtro sul campo stazione per le tabelle che lo prevedono

MULTIDOMINIO

InteroINInputValore non necessarioValore non necessarioDesktopWeb

Indica la possibilità di accedere ai record di una tabella relativi a più domini

Parametro con valori ammessi, si possono utilizzare i seguenti valori:

ValoreDescrizione
0La query NON gestisce la possibilità di accedere ai record di una tabella relativi a più domini
1La query gestisce la possibilità di accedere ai record di una tabella relativi a più domini

VINCOLI

InteroINInputValore non necessarioValore non necessarioDesktopWeb

Permette di abilitare la gestione della profilazione se la tabella è soggetta a un vincolo di tipo elenco, inserendo in modo automatico delle clausole SQL da parte dell'ambiente, per filtrare gli elementi della tabella

Parametro con valori ammessi, si possono utilizzare i seguenti valori:

ValoreDescrizione
0No
1Si

ALIAS

StringaINInputObbligatorioObbligatorioValore non necessarioValore non necessarioDesktopWeb

E' il nome che identifica la CTE nella query.

PARTE

EnumerazioneINInputValore non necessarioValore non necessarioDesktopWeb

Parametro enumerato, può assumere i seguenti valori:

ValoreDescrizione
FISSA
RICORSIVA

NOLOCK

31.2InteroINInputDesktop

Corrisponde all'applicazione della clausola WITH (NOLOCK) su tutte le tabelle SQL presenti nella query.

Parametro con valori ammessi, si possono utilizzare i seguenti valori:

ValoreDescrizione
0Esegue la lettura dei record usando il criterio di isolamento definito sulla transazione. Per valore predefinito la transazione è READ COMMITTED
1Usa un livello di isolamento READ UNCOMMITED, ovvero non applica alcun lock per la lettura dei record

ERRORE

InteroINInputValore non necessarioValore non necessarioDesktopWeb
SottoParametri

Consente al programma di intercettare e gestire l'errore restituito dalla funzione.

suggerimento

Utilizzare uno dei metodi GetLastError*() della classe BCContextInfo per ottenere le informazioni dell'errore.

Esempi

Definizione

 DIM idQueryPrincipale[INT]
DIM idQueryCTE1[INT]
DIM idQueryCTE2[INT]

'@DEFQUERY IDQUERY[idQueryPrincipale] NOME["TEST_DEFQUERYCTE_5"]

'@DEFQUERYCTE IDQUERY[idQueryCTE1] ALIAS["Articoli"] IDQUERYPADRE[idQueryPrincipale]

'@DEFQUERYCTE IDQUERY[idQueryCTE2] ALIAS["Varianti"] IDQUERYPADRE[idQueryCTE2]

'@DEFQUERYFROM IDQUERY[idQueryCTE2] TABELLA[BLDVAR]

'@DEFQUERYCOLUMN IDQUERY[idQueryCTE2] ESPR[BLDVAR.DES AS [DesVarianteV]] _
ESPR[BLDVAR.CODART AS [CodArtV]] _
ESPR[BLDVAR.COSTO AS [CodCostoSTDV]]

'@DEFQUERYFROM IDQUERY[idQueryCTE1] TABELLA[BLDART]

'@DEFQUERYJOIN IDQUERY[idQueryCTE1] TABELLA[[Varianti]] TABELLAPADRE[BLDART] _
REL[[Varianti].CodArtV = BLDART.COD] _
OPERATOREJOIN["INNER"]

'@DEFQUERYCOLUMN IDQUERY[idQueryCTE2] ESPR[BLDART.COD AS [CodArt]] _
ESPR[BLDART.DES AS [DesArtA]] _
ESPR[BLDART.PREZZO AS [PrezzoA]] _
ESPR[[Varianti].DesVarianteV AS [DesVarianteA]] _
ESPR[[Varianti].CodCostoSTDV AS [CodCostoSTDA]]

'@DEFQUERYFROM IDQUERY[idQueryPrincipale] TABELLA[[Articoli]]

'@DEFQUERYCOLUMN IDQUERY[idQueryPrincipale] ESPR[[Articoli].DesArtA AS [DesArticolo]] _
ESPR[[Articoli].PrezzoA AS [Prezzo]] _
ESPR[[Articoli].DesVarianteA AS [DesVariante]] _
ESPR[[Articoli].CodCostoSTDA AS [CostoVariante]]

' Statement SQL generato
'
' WITH Varianti (DesVarianteV, CodArtV, CodCostoSTDV)
' AS
' (SELECT
' BLDVarianti.DesVariante AS [DesVarianteV]
' ,BLDVarianti.CodArt AS [CodArtV]
' ,BLDVarianti.CodCostoSTD AS [CodCostoSTDV]
' FROM BLDVarianti AS [BLDVarianti]
' WHERE (BLDVarianti.DBGruppo = 'GG')),
' Articoli (CodArt, DesArtA, PrezzoA, DesVarianteA, CodCostoSTDA)
' AS
' (SELECT
' BLDArticoli.CodArt AS [CodArt]
' ,BLDArticoli.DesArt AS [DesArtA]
' ,BLDArticoli.Prezzo AS [PrezzoA]
' ,Varianti.DesVarianteV AS [DesVarianteA]
' ,Varianti.CodCostoSTDV AS [CodCostoSTDA]
' FROM BLDArticoli AS [BLDArticoli]
' INNER JOIN Varianti AS [Varianti]
' ON (Varianti.CodArtV = BLDArticoli.CodArt)
' WHERE (BLDArticoli.DBGruppo = 'GG'))
' SELECT
' DesArtA AS [DesArticolo]
' ,PrezzoA AS [Prezzo]
' ,DesVarianteA AS [DesVariante]
' ,CodCostoSTDA AS [CostoVariante]
' FROM Articoli AS [Articoli]
'
' Risultato della query
'
' DesArticolo Prezzo DesVariante CostoVariante
' ------------------------- --------- --------------------------- ----------------
' Articolo 001 120.00 Variante 001 25.000000
' Articolo 001 120.00 Variante 002 23.000000
' Articolo 001 120.00 Variante 003 22.000000
' Articolo 005 2.50 Variante 01 23.670000
' Articolo 018 134.00 Variante 001 0.000000
' Articolo 018 134.00 Variante 002 0.000000
' Articolo 018 134.00 Variante 003 0.000000
' Articolo con matricole 10.00 Articolo di colore Blu 2.000000
' Articolo con matricole 10.00 Articolo di colore Rosso 3.000000

Definizione ricorsiva

    
DIM idQueryPrincipale[INT]
DIM idQueryCTE1[INT]
DIM idQueryCTE2[INT]

'@DEFQUERY IDQUERY[idQueryPrincipale] NOME["TEST_DEFQUERYCTE_5"]

'@DEFQUERYCTE IDQUERY[idQueryCTE1] ALIAS["Report"] IDQUERYPADRE[idQueryPrincipale] PARTE[#RICORSIVA]

'@DEFQUERYCTE IDQUERY[idQueryCTE2] ALIAS["Report"] IDQUERYPADRE[idQueryCTE2] PARTE[#FISSA]

'@DEFQUERYFROM IDQUERY[idQueryCTE2] TABELLA[BLDIMPIEGATI]

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idQueryCTE2] ESPR[FNTRSD$(BLDIMPIEGATI.Nome) + " " + FNTRSD$(BLDIMPIEGATI.Cognome) AS [DesImpiegato] FMT[TESTO[255]]]

'@DEFQUERYCOLUMN IDQUERY[idQueryCTE2] ESPR[BLDIMPIEGATI.IDImpiegato AS [IDImpiegato]]

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idQueryCTE2] ESPR[DECODDES$(BLDIMPIEGATI.Posizione) AS [Posizione] FMT[TESTO[255]]] _

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idQueryCTE2] ESPR[1 AS [Livello] FMT[NUMERICO[2]]]

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idQueryCTE2] ESPR[FNTRSD$(BLDIMPIEGATI.Nome) + " " + FNTRSD$(BLDIMPIEGATI.Cognome) AS [Sort] FMT[TESTO[255]]]

'@DEFQUERYWHERE IDQUERY[idQueryCTE2] ESPR[BLDIMPIEGATI.IDResponsabile = 0]

'@DEFQUERYFROM IDQUERY[idQueryCTE1] TABELLA[BLDIMPIEGATI]

'@DEFQUERYJOIN IDQUERY[idQueryCTE1] TABELLA[[Report]] TABELLAPADRE[BLDIMPIEGATI] _
REL[[Report].IDImpiegato = BLDIMPIEGATI.IDResponsabile] _
OPERATOREJOIN["JOIN"]

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idQueryCTE1] ESPR[STRING$([Report].Livello, "| ") + FNTRSD$(BLDIMPIEGATI.Nome) + " " + FNTRSD$(BLDIMPIEGATI.Cognome) AS [DesImpiegato] FMT[TESTO[255]]]

'@DEFQUERYCOLUMN IDQUERY[idQueryCTE1] ESPR[BLDIMPIEGATI.IDImpiegato AS [IDImpiegato]]

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idQueryCTE1] ESPR[DECODDES$(BLDIMPIEGATI.Posizione) AS [Posizione] FMT[TESTO[255]]] _

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idQueryCTE1] ESPR[[Report].Livello + 1 AS [Livello] FMT[NUMERICO[2]]]

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idQueryCTE1] ESPR[FNTR$([Report].Sort) + "| " + FNTRSD$(BLDIMPIEGATI.Nome) + " " + FNTRSD$(BLDIMPIEGATI.Cognome) AS [Sort] FMT[TESTO[255]]]

'@DEFQUERYFROM IDQUERY[idQueryPrincipale] TABELLA[[Report]]

'@DEFQUERYCOLUMN IDQUERY[idQueryPrincipale] ESPR[[Report].IDImpiegato AS [IDImpiegato]] _
ESPR[[Report].DesImpiegato AS [DesImpiegato]] _
ESPR[[Report].Posizione AS [Posizione]] _
ESPR[[Report].Livello AS [Livello]] _
ESPR[[Report].Sort AS [Sort]] NOOUTPUT[1]

'@DEFQUERYORDERBY IDQUERY[idQueryPrincipale] ESPR[[Sort]]

' Statement SQL generato
'
' ;
' WITH Report (DesImpiegato, IDImpiegato, Posizione, Livello, Sort)
' AS
' (SELECT
' CAST(LTRIM(RTRIM(BLDImpiegati.Nome)) + ' ' + LTRIM(RTRIM(BLDImpiegati.Cognome)) AS VARCHAR(255)) AS [DesImpiegato]
' ,BLDImpiegati.IDImpiegato AS [IDImpiegato]
' ,CAST(CASE BLDImpiegati.Posizione
' WHEN 1 THEN 'Amministratore delegato'
' WHEN 2 THEN 'Vicepresidente delle vendite'
' WHEN 3 THEN 'Direttore vendite'
' WHEN 4 THEN 'Rappresentante commerciale'
' WHEN 5 THEN 'Direttore vendite esterno'
' WHEN 6 THEN 'Direttore marketing'
' WHEN 7 THEN 'Specialista marketing'
' END AS VARCHAR(255)) AS [Posizione]
' ,1 AS [Livello]
' ,CAST(LTRIM(RTRIM(BLDImpiegati.Nome)) + ' ' + LTRIM(RTRIM(BLDImpiegati.Cognome)) AS VARCHAR(255)) AS [Sort]
' FROM BLDImpiegati AS [BLDImpiegati]
' WHERE ((BLDImpiegati.IDResponsabile = 0))
' AND (BLDImpiegati.DBGruppo = 'GG')
'
'
'
' UNION ALL
' SELECT
' CAST(REPLICATE('| ', Report_1.Livello) + LTRIM(RTRIM(BLDImpiegati.Nome)) + ' ' + LTRIM(RTRIM(BLDImpiegati.Cognome)) AS VARCHAR(255)) AS [DesImpiegato]
' ,BLDImpiegati.IDImpiegato AS [IDImpiegato]
' ,CAST(CASE BLDImpiegati.Posizione
' WHEN 1 THEN 'Amministratore delegato'
' WHEN 2 THEN 'Vicepresidente delle vendite'
' WHEN 3 THEN 'Direttore vendite'
' WHEN 4 THEN 'Rappresentante commerciale'
' WHEN 5 THEN 'Direttore vendite esterno'
' WHEN 6 THEN 'Direttore marketing'
' WHEN 7 THEN 'Specialista marketing'
' END AS VARCHAR(255)) AS [Posizione]
' ,Report_1.Livello + 1 AS [Livello]
' ,CAST(RTRIM(Report_1.Sort) + '| ' + LTRIM(RTRIM(BLDImpiegati.Nome)) + ' ' + LTRIM(RTRIM(BLDImpiegati.Cognome)) AS VARCHAR(255)) AS [Sort]
' FROM BLDImpiegati AS [BLDImpiegati]
' INNER JOIN Report AS [Report_1]
' ON (Report_1.IDImpiegato = BLDImpiegati.IDResponsabile)
' WHERE (BLDImpiegati.DBGruppo = 'GG'))
' SELECT
' IDImpiegato AS [IDImpiegato]
' ,DesImpiegato AS [DesImpiegato]
' ,Posizione AS [Posizione]
' ,Livello AS [Livello]
' FROM Report AS [Report]
'
'
' ORDER BY Sort ASC
'
' Risultato della query
'
' IDImpiegato DesImpiegato Posizione Livello
' -------------- --------------------------------- ------------------------------- ----------
' 1 Mario Rossi Amministratore delegato 1
' 273 | Paolo Verdi Vicepresidente delle vendite 2
' 16 | | Davide Fucsia Direttore marketing 3
' 23 | | | Maria Rosa Specialista marketing 4
' 274 | | Giovannni Bianchi Direttore vendite 3
' 276 | | | Linda Blu Rappresentante commerciale 4
' 275 | | | Michele Gialli Rappresentante commerciale 4
' 285 | | Sara Viola Direttore vendite esterno 3
' 286 | | | Laura Arancione Rappresentante commerciale 4

Definizione con union tra query

 
DIM idQueryPrincipale[INT]
DIM idUnionQuery[INT]
DIM idUnionQuery2[INT]
DIM idUnionQuery3[INT]
DIM idQueryCTE1[INT]
DIM idQueryCTE2[INT]


'@DEFQUERY IDQUERY[idQueryPrincipale] NOME["TEST_DEFQUERYCTE_8"]

'@DEFQUERY IDQUERY[idUnionQuery] NOME["TEST_DEFQUERY_9"]

'@DEFQUERYCTE IDQUERY[idQueryCTE1] ALIAS["Impiegati"] IDQUERYPADRE[idUnionQuery]

'@DEFQUERYFROM IDQUERY[idQueryCTE1] TABELLA[BLDIMPIEGATI]

'@DEFQUERYCOLUMN IDQUERY[idQueryCTE1] ESPR[GROUPBY(BLDIMPIEGATI.IDUfficio) AS [IdUfficio]] _
ESPR[COUNT(BLDIMPIEGATI.IDImpiegato) AS [ContaUfficio]]

'@DEFQUERYWHERE IDQUERY[idQueryCTE1] ESPRHAVING[[ContaUfficio] > 1]


'@DEFQUERYFROM IDQUERY[idUnionQuery] TABELLA[BLDUFFICI]

'@DEFQUERYJOIN IDQUERY[idUnionQuery] TABELLA[[Impiegati]] TABELLAPADRE[BLDUFFICI] _
REL[[Impiegati].IdUfficio = BLDUFFICI.IDUfficio] _
OPERATOREJOIN["INNER"]



'@DEFQUERYCOLUMN IDQUERY[idUnionQuery] ESPR[BLDUFFICI.Descrizione AS [DescrizioneUfficio]] _
ESPR[[Impiegati].ContaUfficio AS [NumeroImpiegati]]



'@DEFQUERY IDQUERY[idUnionQuery2] NOME["TEST_DEFQUERY_9_2"]

'@DEFQUERYCTE IDQUERY[idQueryCTE2] ALIAS["Impiegati2"] IDQUERYPADRE[idUnionQuery2]

'@DEFQUERYFROM IDQUERY[idQueryCTE2] TABELLA[BLDIMPIEGATI]

'@DEFQUERYCOLUMN IDQUERY[idQueryCTE2] ESPR[GROUPBY(BLDIMPIEGATI.IDUfficio) AS [IdUfficio]] _
ESPR[COUNT(BLDIMPIEGATI.IDImpiegato) AS [ContaUfficio]]

'@DEFQUERYWHERE IDQUERY[idQueryCTE2] ESPRHAVING[[ContaUfficio] = 1]


'@DEFQUERYFROM IDQUERY[idUnionQuery2] TABELLA[BLDUFFICI]

'@DEFQUERYJOIN IDQUERY[idUnionQuery2] TABELLA[[Impiegati2]] TABELLAPADRE[BLDUFFICI] _
REL[[Impiegati2].IdUfficio = BLDUFFICI.IDUfficio] _
OPERATOREJOIN["INNER"]



'@DEFQUERYCOLUMN IDQUERY[idUnionQuery2] ESPR[BLDUFFICI.Descrizione AS [DescrizioneUfficio]] _
ESPR[[Impiegati2].ContaUfficio AS [NumeroImpiegati]]


'@DEFQUERY IDQUERY[idUnionQuery3] NOME["TEST_DEFQUERY_9_3"]

'@DEFQUERYFROM IDQUERY[idUnionQuery3] TABELLA[BLDUFFICI]

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idUnionQuery3] ESPR["Ufficio fittizio" AS [DescrizioneUfficio] FMT[TESTO[255]]]

'@DEFQUERYCOMPUTEDCOLUMN IDQUERY[idUnionQuery3] ESPR[12 AS [NumeroImpiegati] FMT[NUMERICO[2]]]



'@DEFQUERYUNION IDQUERYUNION[idQueryPrincipale] _
QUERY[idUnionQuery] _
QUERY[idUnionQuery2] _
QUERY[idUnionQuery3]

'@DEFQUERYSET IDQUERY[idQueryPrincipale] ESPR[QRY(idUnionQuery) UNION QRY(idUnionQuery2) UNION QRY(idUnionQuery3)]
'@DEFQUERYORDERBY IDQUERY[idQueryPrincipale] ESPR[[DescrizioneUfficio]]






' Statement SQL generato
'
' ;
' WITH Impiegati (IdUfficio, ContaUfficio)
' AS
' (SELECT
' IDUfficio AS [IdUfficio]
' ,COUNT(IDImpiegato) AS [ContaUfficio]
' FROM BLDImpiegati AS [BLDImpiegati]
' WHERE (DBGruppo = 'GG')
' GROUP BY IDUfficio
' HAVING (COUNT((IDImpiegato)) > 1)),
' Impiegati2 (IdUfficio, ContaUfficio)
' AS
' (SELECT
' IDUfficio AS [IdUfficio]
' ,COUNT(IDImpiegato) AS [ContaUfficio]
' FROM BLDImpiegati AS [BLDImpiegati]
' WHERE (DBGruppo = 'GG')
' GROUP BY IDUfficio
' HAVING (COUNT((IDImpiegato)) = 1))
' SELECT
' BLDUffici_1.Descrizione AS [DescrizioneUfficio]
' ,Impiegati_1.ContaUfficio AS [NumeroImpiegati]
' FROM BLDUffici AS [BLDUffici_1]
' INNER JOIN Impiegati AS [Impiegati_1]
' ON (Impiegati_1.IdUfficio = BLDUffici_1.IDUfficio)
' WHERE (BLDUffici_1.DBGruppo = 'GG')
'
'
' UNION SELECT
' BLDUffici_1.Descrizione AS [DescrizioneUfficio]
' ,Impiegati2.ContaUfficio AS [NumeroImpiegati]
' FROM BLDUffici AS [BLDUffici_1]
' INNER JOIN Impiegati2 AS [Impiegati2]
' ON (Impiegati2.IdUfficio = BLDUffici_1.IDUfficio)
' WHERE (BLDUffici_1.DBGruppo = 'GG')
'
'
' UNION SELECT
' 'Ufficio fittizio' AS [DescrizioneUfficio]
' ,12 AS [NumeroImpiegati]
' FROM BLDUffici AS [BLDUffici_1]
' WHERE (BLDUffici_1.DBGruppo = 'GG')
'
'
' ORDER BY [DescrizioneUfficio] ASC
'
' Risultato della query
'
' DescrizioneUfficio NumeroImpiegati
' ---------------------- ------------------
' Direzione 1
' Ufficio Commerciale 6
' Ufficio fittizio 12
' Ufficio Marketing 2

Riferimenti

Le query in BC
Le subquery in BC
Le common table expressions (CTEs) in BC