如何将正列移动到另一列?

How to move the positive column into another column?

我必须将正值和负值分隔到不同的列中,我知道我可以通过使用 CASE WHEN 语句来实现,但结果是错误 "Invalid column name TBAmt"。 下面是我的 SQL 代码,有人可以建议吗?谢谢

SELECT 
B.ACCTFMTTD, B.ACCTDESC, A.FSCSYR, A.CURNTYPE, (A.OPENBAL + A.NETPERD1 + A.NETPERD2 + A.NETPERD3 + A.NETPERD4 + A.NETPERD5 + A.NETPERD6 + A.NETPERD7 + A.NETPERD8 + A.NETPERD9 + A.NETPERD10 + A.NETPERD11 + A.NETPERD12 + A.NETPERD13 + A.NETPERD14) AS TBAmt,

CASE WHEN [TBAmt] > 0 THEN [TBAmt] ELSE 0 END AS Debit,
CASE WHEN [TBAmt] < 0 THEN [TBAmt] ELSE 0 END AS Credit

FROM GLAFS AS A LEFT JOIN GLAMF AS B ON A.ACCTID = B.ACCTID
where 
A.FSCSYR = '2018' AND A.CURNTYPE = 'F'

如果要使用自建列,需要写成子查询TBAmt

SELECT
   CASE WHEN [TBAmt] > 0 THEN [TBAmt] ELSE 0 END AS Debit,
   CASE WHEN [TBAmt] < 0 THEN [TBAmt] ELSE 0 END AS Credit
FROM
(
   SELECT 
      B.ACCTFMTTD, B.ACCTDESC, A.FSCSYR, A.CURNTYPE, (A.OPENBAL + A.NETPERD1 + A.NETPERD2 + A.NETPERD3 + A.NETPERD4 + A.NETPERD5 + A.NETPERD6 + A.NETPERD7 + A.NETPERD8 + A.NETPERD9 + A.NETPERD10 + A.NETPERD11 + A.NETPERD12 + A.NETPERD13 + A.NETPERD14) AS TBAmt

   FROM GLAFS AS A LEFT JOIN GLAMF AS B ON A.ACCTID = B.ACCTID
   where 
      A.FSCSYR = '2018' AND A.CURNTYPE = 'F'
) tbl

SQL 服务器允许您使用横向连接声明此类表达式(即 apply):

SELECT AM.ACCTFMTTD, AM.ACCTDESC,
       AF.FSCSYR, AF.CURNTYPE, V.TBAmt,
       (CASE WHEN V.TBAmt > 0 THEN TBAmt ELSE 0 END) AS Debit,
       (CASE WHEN V.TBAmt < 0 THEN TBAmt ELSE 0 END) AS Credit
FROM GLAFS AF LEFT JOIN
     GLAMF AM
     ON AF.ACCTID = AM.ACCTID CROSS APPLY
     (VALUES (AF.OPENBAL + AF.NETPERD1 + AF.NETPERD2 + AF.NETPERD3 + AF.NETPERD4 + AF.NETPERD5 + AF.NETPERD6 + AF.NETPERD7 + AF.NETPERD8 + AF.NETPERD9 + AF.NETPERD10 + AF.NETPERD11 + AF.NETPERD12 + AF.NETPERD13 + AF.NETPERD14)
     ) V(v.TBAmt)
WHERE AF.FSCSYR = '2018' AND AF.CURNTYPE = 'F';

您还应该使用有意义的 table 别名而不是任意字母,例如 AB.