Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

utilizzo di un campo "calcolato" nella stessa query

450 views
Skip to first unread message

Nick

unread,
Oct 1, 2009, 10:28:48 AM10/1/09
to
Buongiorno a tutti,
scusate per l'oggetto poco chiaro ma non so come esprimere il concetto
brevemente:
ho una query fatta così (ad un certo punto)

select ... substring([Txt1],1,patindex('%-%',[Txt1])-1)as pretxt ...

e vorrei poter utilizzare nella stessa query il campo pretxt appena
creato :
..... newtxt= case
when pretxt like 'P%T' then 'P'...
...
...

senza quindi dover ripetere l'istruzione:
newtxt = case
when substring([Tag# Number],1,patindex('%-%',[Tag# Number])-1)
like 'P&T' then 'P'
...
...
.
.

è possibile?come posso fare?

grazie mille
ciao
Nick

Andrea Montanari

unread,
Oct 1, 2009, 12:26:13 PM10/1/09
to
salve,

Nick wrote:
> Buongiorno a tutti,
> scusate per l'oggetto poco chiaro ma non so come esprimere il concetto
> brevemente:
> ho una query fatta cos� (ad un certo punto)

>
> select ... substring([Txt1],1,patindex('%-%',[Txt1])-1)as pretxt ...
>
> e vorrei poter utilizzare nella stessa query il campo pretxt appena
> creato :
> ..... newtxt= case
> when pretxt like 'P%T' then 'P'...
> ...
> ...
>
> senza quindi dover ripetere l'istruzione:
> newtxt = case
> when substring([Tag# Number],1,patindex('%-%',[Tag# Number])-1)
> like 'P&T' then 'P'
> ...

no, non puoi.. l'esplosione delle colonne della select list e' un'operazione
atomica, e non puoi, a esempio, pensare di operare da sinistra verso destra
per riutilizzare delle proiezioni calcolate successivamente..
quindi devi ripetere esattamente la stessa formula ed estenderla come ti si
conviene..
oppure, partendo da SQL Server 2005, puoi fare ben uso di una common table
expression dove metterai tutta la logica di selezione in essa e, nel
successivo utilizzo, potrai riciclare la colonna calcolata che hai ottenuto
nella cte..
quindi qualche cosa di simile a
WITH cte AS (
SELECT col1,
col2 * 15 AS [colN],


substring([Txt1],1,patindex('%-%',[Txt1])-1)as pretxt

FROM xxx
WHERE yyy
)
SELECT col1, colN, pretxt, left(pretxt, 10) AS [part of pretext]
FROM cte;

saluti
--
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz
DbaMgr2k ver 0.21.1 - DbaMgr ver 0.65.1 and further SQL Tools
http://www.hotelsole.com - http://www.hotelsolericcione.de
--------- remove DMO to reply


0 new messages