mHe*_*pMe 1 sql sql-server sql-server-2012
我正在使用SQL Server 2012.
我写了下面的查询,除了我包含最后一行'NomDiff <> 0'时,它的工作正常.
它告诉我NomDiff是一个无效的列名.我不明白为什么,也不知道如何让查询只返回nomDiff不等于零的行?
;with pf as
(
select Name, Sedol, Nominal from tblTempPLF
where FundCode = 'CSGE'
), pc as
(
select Name, Sedol, Nominal from tblTempPCF
where FundCode = 'BTCM'
)
select coalesce(pf.Name, pc.Name) Name, coalesce(pf.Sedol, pc.Sedol) Sedol,
isnull(pf.Nominal,0) PfNom, isnull(pc.Nominal,0) PcNom, isnull(pf.Nominal,0) - isnull(pc.Nominal,0) NomDiff
from pf full outer join pc on pf.Sedol = pc.Sedol
where NomDiff <> 0
Run Code Online (Sandbox Code Playgroud)
使用APPLY VALUES是一种不必使用子查询或其他CTE的好方法:
WITH pf
AS ( SELECT
Name ,
Sedol ,
Nominal
FROM tblTempPLF
WHERE FundCode = 'CSGE'
),
pc
AS ( SELECT
Name ,
Sedol ,
Nominal
FROM tblTempPCF
WHERE FundCode = 'BTCM'
)
SELECT
Name = COALESCE(pf.Name, pc.Name),
Sedol = COALESCE(pf.Sedol, pc.Sedol),
PfNom = ISNULL(pf.Nominal, 0),
PcNom = ISNULL(pc.Nominal, 0),
NomDiff = Nom.Diff
FROM pf
FULL OUTER JOIN pc
ON pf.Sedol = pc.Sedol
CROSS APPLY(VALUES(ISNULL(pf.Nominal, 0) - ISNULL(pc.Nominal, 0))) AS Nom(Diff)
WHERE Nom.Diff <> 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |