AS问题,非常奇怪.

这是一个将ip地址截分为四段,然后对每段进行不同的运算,然后相加得到一个数值的SQL语句。

SELECT
CharIndex('.',IPA) AS PosA1,
CharIndex('.',IPA,SubString(IPA, PosA1 + 1, LEN(IPA) - PosA1 - 1)) + PosA1 AS PosA2,
CharIndex('.',IPA,SubString(IPA, PosA2 + 1, LEN(IPA) - PosA2 - 1)) + PosA2 AS PosA3,

convert(int,SubString(IPA, 1, PosA1 - 1)) * 255 * 255 * 255 AS IPA1,
convert(int,SubString(IPA, PosA1 + 1, PosA2 - PosA1 - 1)) * 255 * 255 AS IPA2,
convert(int,SubString(IPA, PosA2 + 1, PosA3 - PosA2 - 1)) * 255 AS IPA3,
convert(int,SubString(IPA, PosA3 + 1, LEN(IPA) - PosA3)) AS IPA4,
IPA1 + IPA2 + IPA3 + IPA4 AS IPA_ALL,

CharIndex('.',IPB) AS PosB1,
CharIndex('.',IPB,SubString(IPB, PosB1 + 1, LEN(IPB) - PosB1 - 1)) + PosB1 AS PosB2,
CharIndex('.',IPB,SubString(IPB, PosB2 + 1, LEN(IPB) - PosB2 - 1)) + PosB2 AS PosB3,

convert(int,SubString(IPB, 1, PosB1 - 1)) * 255 * 255 * 255 AS IPB1,
convert(int,SubString(IPB, PosB1 + 1, PosB2 - PosB1 - 1)) * 255 * 255 AS IPB2,
convert(int,SubString(IPB, PosB2 + 1, PosB3 - PosB2 - 1)) * 255 AS IPB3,
convert(int,SubString(IPB, PosB3 + 1, LEN(IPB) - PosB3)) AS IPB4,
IPB1 + IPB2 + IPB3 + IPB4 AS IPB_ALL,
IPMORE AS IPMORE

上面的在ACCESS中是可以使用的,看起来很复杂,其实不外乎就解决一个AS问题。
如:select sum(num) as ex1, ex1 * 0.7 as ex2 from xxx
这里要求ex1在整个sql语句中如何再次使用?
当然可以写成:
select sum(num) as ex1, sum(num) * 0.7 as ex2 from xxx
但是像上面的那个复杂的东东,做起来就很复杂了。

请教高手。
[1567 byte] By [wtoeb-FAQC.COM] at [2008-1-9]
# 1
第一条当然不可以,ex1列还没有身成怎么使用啊。
如果想用
select a.ex1, a.ex1 * 0.7 as ex2 from
(select sum(num) as ex1 from xxx) as a
dg4134-阿牛 at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...