7 messaggi dal 17 settembre 2015
Ciao a tutti, ho un piccolo problema, dato che non sono proprio ferratissimo in Sql, avrei bisogno di sapere come fare per sommare (o sottrarre) due valori che provengono da : il primo da un campo della query principale (pratiche.valore) e l'altro da una sottoquery all'interno della query principale a cui ho assegnato l'alias "Tot_Acconti_Pagati" per creare un campo da visualizzare con il nome di "Saldo_Effettivo" utilizzando solo la query principale. E' possibile ? se affermativo come fare ?
Il tutto risiede in un programma in Asp.Net e non all'interno del SQL SERVER.
Allego la query che uso attualmente alla quale vorrei aggiungere il campo "Saldo_Effettivo" per la visualizzazione.

"select Pratiche.[Id Pratica],NumPrat,Anno,utenti.utente as Titolare, (SELECT Utente FROM Utenti WHERE [Id Utente] = Pratiche.[Id Assegnatario]) As Assegnatario, Pratiche.[Data Invio],subcat.Sottocategoria, subcat.Punti, Clienti.Cognome, Clienti.Nome,Clienti.[DataNascita], Clienti.[CodiceFiscale],Aziende.RagioneSociale As Azienda, Aziende.PIva, Esiti.Esito, Pratiche.Valore, (SELECT SUM(Importo) FROM Contabilita WHERE IdPratica = pratiche.[Id Pratica]) AS Tot_Acconti, (SELECT SUM(Importo) FROM Contabilita WHERE IdPratica = pratiche.[Id Pratica] AND Pagata = -1) AS Tot_Acconti_Pagati, (SELECT SUM(Importo) FROM Contabilita WHERE IdPratica = pratiche.[Id Pratica] AND Pagata = 0) AS Tot_Acconti_Non_Pagati, Pratiche.[Data Chiusura], Pratiche.[Note Collaboratore], pratiche.[Note Amministratore] FROM pratiche inner join utenti on pratiche.[id utente] = utenti.[id utente] inner join subcat on pratiche.[id subcat] = subcat.[Id SubCat] inner join clienti on pratiche.[idCliente] = clienti.[IdCliente] left join Aziende on pratiche.[idAzienda] = Aziende.[IdAzienda] inner join esiti on pratiche.[id esito] = esiti.[id esito] ORDER BY [Data Invio] DESC,[Id Pratica] DESC"


Grazie anticipatamente.
Giuseppe
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
non ho letto la query ma ho letto il testo della richiesta...
si, si puo' fare.... il metodo "secco" e' quello di ripetere nella query principale la proiezione intera della sub query... brutto vero? :)
il metodo "prolisso", invece, e' creare la sub query come una common table expression a monte, da mettere in join con la query principale...
brutalmente (e senza fare riferimento alla tua query):
WITH cte AS (
  SELECT id, x, y, z
    FROM dbo.Tabella
    WHERE ....
  )
  SELECT .....
    , colX + cte.x AS [Alias]
    FROM dbo.baseTable bt
      JOIN cte ON cte.id = bt.id
    WHERE ....

saluti
Modificato da Andrea Montanari il 09 luglio 2018 17.43 -

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
7 messaggi dal 17 settembre 2015
Ciao, grazie mille per la risposta, siccome non ho molta esperienza nelle query sql come ho indicato nel primo post, avevo allegato a tal proposito la query che utilizzo al momento perfettamente funzionate ma priva di questo malefico campo calcolato. Non so se chiedo troppo.... ma avrei bisogno di un esempio proprio sulla mia query perchè senno non ne esco più ... e magari capirò bene il funzionamente di questo CTE.
Grazie anticipatamente.

Giuseppe Reda
1.976 messaggi dal 27 luglio 2005
Contributi
salve Giuseppe,
bene.... ma....
invece della solo query, produci per favore anche lo scenario completo, composto in questo caso da 6 tabelle, con opportuna popolazione dello stesso, che significa, produci gli appositi comandi
CREATE TABLE seguiti da un minimale set di INSERT INTO per popolarlo...
ovviamente tale scenario deve essere minimale, con le sole tabelle necessarie e con i relativi attributi altrettanto necessari e non irrilevanti...
diversamente, chi ti voglia aiutare, dovra' prima definire la realta' coinvolta in termini relazionali e quindi popolarla appropriatamente, cosa inutile e perditempo oltre che potenzialmente suscettibile di errori...
salutoni

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.