如何将正列移动到另一列?
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 别名而不是任意字母,例如 A
和 B
.
我必须将正值和负值分隔到不同的列中,我知道我可以通过使用 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 别名而不是任意字母,例如 A
和 B
.