繁体   English   中英

如何在前面的语句中添加和减去值

[英]How to add and subtract values from previous statements

我正在使用以下代码获取错误无效的列名称:

SELECT 
    DS, AccNumber, PPeriod, 
    MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS Opening, 
    MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS electricity,
    MAX(CASE WHEN LinkAcc = '1045000' THEN amount END) AS water, 
    MAX(CASE WHEN LinkAcc = '1000000' THEN amount END) AS levy,
    MAX(CASE WHEN LinkAcc = '2750000' THEN amount END) AS Interest, 
    MAX(CASE WHEN LinkAcc = '4000000' THEN amount END) AS Legal,
    MAX(CASE WHEN LinkAcc = '1020000' THEN amount END) AS Sewer,
    SUM(CASE WHEN LinkAcc IN ('4350003','3850000','9250000') THEN amount END) As Other,
    SUM(CASE WHEN LinkAcc IN ('8420000','8400000') AND amount < 0 THEN amount END) As Payments,
   (Opening + electricity + water + levy + Interest + Legal + Sewer + Other - Payments) AS Due
FROM 
    dbo.Table1
WHERE 
    (AccNumber BETWEEN 'CC001' AND 'CC100')
GROUP BY 
    DataSource, AccNumber, PPeriod
HAVING 
    (DataSource = 'PAS11CEDCRE16') AND (PPeriod = 112)

我正在尝试执行上述加减运算,但是列名无效,我尝试将表名放在列名之前,但是仍然失败。

使用当前查询作为派生表,或使用CTE。

派生表:

SELECT  *,
        (Opening + electricity + water + levy + Interest + Legal + Sewer + Other - Payments) AS Due
FROM (  SELECT DS, AccNumber, PPeriod, 
        MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS Opening, 
        MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS electricity,
        MAX(CASE WHEN LinkAcc = '1045000' THEN amount END) AS water, 
        MAX(CASE WHEN LinkAcc = '1000000' THEN amount END) AS levy,
        MAX(CASE WHEN LinkAcc = '2750000' THEN amount END) AS Interest, 
        MAX(CASE WHEN LinkAcc = '4000000' THEN amount END) AS Legal,
        MAX(CASE WHEN LinkAcc = '1020000' THEN amount END) AS Sewer,
        SUM(CASE WHEN LinkAcc IN ('4350003','3850000','9250000') THEN amount END) As Other,
        SUM(CASE WHEN LinkAcc IN ('8420000','8400000') AND amount < 0 THEN amount END) As Payments,
        FROM dbo.Table1
        WHERE (AccNumber BETWEEN 'CC001' AND 'CC100')
        GROUP BY DataSource, AccNumber, PPeriod
        HAVING (DataSource = 'PAS11CEDCRE16') AND (PPeriod = 112)) AS T;

CTE:

WITH CTE AS
(
    SELECT DS, AccNumber, PPeriod, 
    MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS Opening, 
    MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS electricity,
    MAX(CASE WHEN LinkAcc = '1045000' THEN amount END) AS water, 
    MAX(CASE WHEN LinkAcc = '1000000' THEN amount END) AS levy,
    MAX(CASE WHEN LinkAcc = '2750000' THEN amount END) AS Interest, 
    MAX(CASE WHEN LinkAcc = '4000000' THEN amount END) AS Legal,
    MAX(CASE WHEN LinkAcc = '1020000' THEN amount END) AS Sewer,
    SUM(CASE WHEN LinkAcc IN ('4350003','3850000','9250000') THEN amount END) As Other,
    SUM(CASE WHEN LinkAcc IN ('8420000','8400000') AND amount < 0 THEN amount END) As Payments,
    FROM dbo.Table1
    WHERE (AccNumber BETWEEN 'CC001' AND 'CC100')
    GROUP BY DataSource, AccNumber, PPeriod
    HAVING (DataSource = 'PAS11CEDCRE16') AND (PPeriod = 112)
)
SELECT  *,
        (Opening + electricity + water + levy + Interest + Legal + Sewer + Other - Payments) AS Due
FROM CTE;

使用CTE

;WITH CTE AS (SELECT DS, AccNumber, PPeriod, 
MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS Opening, 
MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS electricity,
MAX(CASE WHEN LinkAcc = '1045000' THEN amount END) AS water, 
MAX(CASE WHEN LinkAcc = '1000000' THEN amount END) AS levy,
MAX(CASE WHEN LinkAcc = '2750000' THEN amount END) AS Interest, 
MAX(CASE WHEN LinkAcc = '4000000' THEN amount END) AS Legal,
MAX(CASE WHEN LinkAcc = '1020000' THEN amount END) AS Sewer,
SUM(CASE WHEN LinkAcc IN ('4350003','3850000','9250000') THEN amount END) As Other,
SUM(CASE WHEN LinkAcc IN ('8420000','8400000') AND amount < 0 THEN amount END) As Payments

FROM dbo.Table1
WHERE (AccNumber BETWEEN 'CC001' AND 'CC100')
GROUP BY DataSource, AccNumber, PPeriod,

HAVING (DataSource = 'PAS11CEDCRE16') AND (PPeriod = 112))

Select 
*,
(Opening + electricity + water + levy + Interest + Legal + Sewer + Other - Payments) AS Due 
FROM
     CTE

要么

派生表:

Select T.*,
(Opening + electricity + water + levy + Interest + Legal + Sewer + Other - Payments) AS Due  from (
SELECT DS, AccNumber, PPeriod, 
MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS Opening, 
MAX(CASE WHEN LinkAcc = '1010000' THEN amount END) AS electricity,
MAX(CASE WHEN LinkAcc = '1045000' THEN amount END) AS water, 
MAX(CASE WHEN LinkAcc = '1000000' THEN amount END) AS levy,
MAX(CASE WHEN LinkAcc = '2750000' THEN amount END) AS Interest, 
MAX(CASE WHEN LinkAcc = '4000000' THEN amount END) AS Legal,
MAX(CASE WHEN LinkAcc = '1020000' THEN amount END) AS Sewer,
SUM(CASE WHEN LinkAcc IN ('4350003','3850000','9250000') THEN amount END) As Other,
SUM(CASE WHEN LinkAcc IN ('8420000','8400000') AND amount < 0 THEN amount END) As Payments

FROM dbo.Table1
WHERE (AccNumber BETWEEN 'CC001' AND 'CC100')
GROUP BY DataSource, AccNumber, PPeriod,

HAVING (DataSource = 'PAS11CEDCRE16') AND (PPeriod = 112))T

用外部SELECT包裹查询。 您不能引入别名并在同一SELECT子句中使用它。

SELECT Opening, 
  electricity,
  water, 
  levy,
  Interest, 
  Legal,
  Sewer,
  Other,
  Payments,
  (Opening + electricity + water + levy + Interest + Legal + Sewer + Other - Payments) AS Due
FROM (
-- original query here
) q

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM