我必须将正值和负值分离到不同的列中,我知道我可以使用CASE WHEN语句来实现这一点,但结果却显示错误“无效的列名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'
答案 0 :(得分:2)
如果要使用自构造列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
答案 1 :(得分:0)
SQL Server允许您使用横向联接(即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';
您还应该使用有意义的表别名,而不要使用诸如A
和B
之类的任意字母。