SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女'
END,E.Authorize_No,E.Charge_Standard,R.Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount)
AS Arrearage_Amount
FROM Account_Receivable_List L,Charge_Item I,Charge_Icence E,Residence_Item R,Student S,Class C ,Specialty P WHERE (L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0) AND (L.Residence_Item_No IS NOT NULL AND
L.Residence_Item_No<>0) AND L.Charge_Icence_No=E.Charge_Icence_No AND L.Residence_Item_No=R.Residence_Item_No AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND
S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19)
UNION ALL
SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN
(RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女'
END,E.Authorize_No,E.Charge_Standard,' ' AS
Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount)
AS Arrearage_Amount
FROM
Account_Receivable_List L,Charge_Item I,Charge_Icence E,Student S,Class C ,Specialty P
WHERE (L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0) AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0)
AND L.Charge_Icence_No=E.Charge_Icence_No AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN
(19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN
(RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS
Charge_Standard,R.Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount)
AS Arrearage_Amount FROM Account_Receivable_List L,Charge_Item I,Residence_Item R,Student S,Class C ,Specialty P WHERE (L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0) AND (L.Residence_Item_No IS NOT NULL AND
L.Residence_Item_No<>0) AND L.Residence_Item_No=R.Residence_Item_No AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No
AND P.Department_No IN (19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN
(RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS Charge_Standard,' ' AS
Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount)
AS Arrearage_Amount FROM Account_Receivable_List L,Charge_Item I,Student S,Class C ,Specialty P WHERE(L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0) AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0) AND
SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19) ORDER BY
C.Class_Code,L.Accounts,L.Charge_Date,L.Charge_Item_Code
我想用SUM()来统计这些字段的值: Account_Receivable_Amount(int),Fact_Amount (int),如何操作啊?!
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女'
END,E.Authorize_No,E.Charge_Standard,R.Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount)
AS Arrearage_Amount
FROM Account_Receivable_List L,Charge_Item I,Charge_Icence E,Residence_Item R,Student S,Class C ,Specialty P WHERE (L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0) AND (L.Residence_Item_No IS NOT NULL AND
L.Residence_Item_No<>0) AND L.Charge_Icence_No=E.Charge_Icence_No AND L.Residence_Item_No=R.Residence_Item_No AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND
S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19)
UNION ALL
SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN
(RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女'
END,E.Authorize_No,E.Charge_Standard,' ' AS
Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount)
AS Arrearage_Amount
FROM
Account_Receivable_List L,Charge_Item I,Charge_Icence E,Student S,Class C ,Specialty P
WHERE (L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0) AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0)
AND L.Charge_Icence_No=E.Charge_Icence_No AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN
(19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN
(RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS
Charge_Standard,R.Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount)
AS Arrearage_Amount FROM Account_Receivable_List L,Charge_Item I,Residence_Item R,Student S,Class C ,Specialty P WHERE (L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0) AND (L.Residence_Item_No IS NOT NULL AND
L.Residence_Item_No<>0) AND L.Residence_Item_No=R.Residence_Item_No AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No
AND P.Department_No IN (19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2)) WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN
(RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期') ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS Charge_Standard,' ' AS
Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount)
AS Arrearage_Amount FROM Account_Receivable_List L,Charge_Item I,Student S,Class C ,Specialty P WHERE(L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0) AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0) AND
SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19) ORDER BY
C.Class_Code,L.Accounts,L.Charge_Date,L.Charge_Item_Code
我想用SUM()来统计这些字段的值: Account_Receivable_Amount(int),Fact_Amount (int),如何操作啊?!
另外
看这sql语句稀疏有序的结构,逻辑不是很复杂啊。
L.Account_Receivable_List_No,
L.Charge_Date,
L.Re,
Charge_Date_Str=
CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年') WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期')
END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,
E.Authorize_No,
E.Charge_Standard,
R.Residence_Item_Name,
L.Charge_Item_Code,
I.Charge_Item_Name,
L.Accounts,
S.Advice_Note,
S.Name,
S.Sex,
C.Class_Code,
C.Class_Name,
L.Account_Receivable_Amount,
L.Derate_Amount,
L.Abate_Amount,
L.Refund_Amount,
L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount
FROM
Account_Receivable_List L,
Charge_Item I,
Charge_Icence E,
Residence_Item R,
Student S,
Class C ,
Specialty P
WHERE
(L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0) AND
(L.Residence_Item_No IS NOT NULL AND L.Residence_Item_No<>0) AND
L.Charge_Icence_No=E.Charge_Icence_No AND
L.Residence_Item_No=R.Residence_Item_No AND
SUBSTRING(L.Charge_Date,1,4)='2006' AND
L.Charge_Item_Code=I.Charge_Item_Code AND
L.Accounts=S.Accounts AND
S.Class_No=C.Class_No AND
C.Specialty_No=P.Specialty_No AND
P.Department_No IN (19)
上pp看能看到不?
Account_Receivable_List L,Charge_Item I,Charge_Icence E,Residence_Item R,Student S,Class C ,Specialty P ,
有的表可能用不到啊以及取数据条件的不一样(主要是
(L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0) AND
(L.Residence_Item_No IS NOT NULL AND L.Residence_Item_No<>0) 这些限制条件的改变
)的这种情况下,我呢于是用unionall 捏它们到一块来了。突然我呢现在就想再统计两个字段啊,就这样,没啥好思路啊。
相册地址是:http://hi.csdn.net/space-1888707-do-album-id-54011.html
我整理了半天,终于有了些思路。就是把这些代码看成一个嵌套表。。SQL2000版本
select
Account_Receivable_List_No,
Charge_Date,
Re,
Charge_Date_Str,
DESex,
Authorize_No,
Charge_Standard,
Residence_Item_Name,
Charge_Item_Code,
Charge_Item_Name,
Accounts,
Advice_Note,
Name,Sex,
Class_Code,Class_Name,
sum(Account_Receivable_Amount)Account_Receivable_Amount,
Derate_Amount,Abate_Amount,
Refund_Amount,
sum(Fact_Amount)Fact_Amount ,
Arrearage_AmountFROM
(
SELECT
L.Account_Receivable_List_No,
L.Charge_Date,
L.Re,
Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,
E.Authorize_No,
E.Charge_Standard,
R.Residence_Item_Name,
L.Charge_Item_Code,
I.Charge_Item_Name,
L.Accounts,
S.Advice_Note,
S.Name,S.Sex,
C.Class_Code,C.Class_Name,
L.Account_Receivable_Amount,
L.Derate_Amount,L.Abate_Amount,
L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount
FROM
Account_Receivable_List L,Charge_Item I,Charge_Icence E,Residence_Item R,Student S,Class C ,Specialty P
WHERE
(L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0)
AND (L.Residence_Item_No IS NOT NULL AND L.Residence_Item_No<>0)
AND L.Charge_Icence_No=E.Charge_Icence_No AND L.Residence_Item_No=R.Residence_Item_No
AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts
AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19)
UNION ALL
SELECT L.Account_Receivable_List_No,
L.Charge_Date,L.Re,
Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,
E.Authorize_No,E.Charge_Standard,
' ' AS Residence_Item_Name,
L.Charge_Item_Code,I.Charge_Item_Name,
L.Accounts,S.Advice_Note,S.Name,S.Sex,
C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,
L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount
FROM
Account_Receivable_List L,Charge_Item I,Charge_Icence E,Student S,Class C ,Specialty P
WHERE
(L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0)
AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0)
AND L.Charge_Icence_No=E.Charge_Icence_No
AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code
AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,
Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS Charge_Standard,
R.Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,
S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,
L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount FROM
Account_Receivable_List L,Charge_Item I,Residence_Item R,Student S,Class C ,Specialty P
WHERE (L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0)
AND (L.Residence_Item_No IS NOT NULL AND L.Residence_Item_No<>0)
AND L.Residence_Item_No=R.Residence_Item_No AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND
L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,
Charge_Date_Str=
CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS Charge_Standard,
' ' AS Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,
S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,
L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount FROM
Account_Receivable_List L,Charge_Item I,Student S,Class C ,Specialty P
WHERE
(L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0) AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0)
AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code
AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19)
) AS TB -- 嵌套表group by Account_Receivable_List_No,
Charge_Date,
Re,
Charge_Date_Str,
DESex,
Authorize_No,
Charge_Standard,
Residence_Item_Name,
Charge_Item_Code,
Charge_Item_Name,
Accounts,
Advice_Note,
Name,Sex,
Class_Code,Class_Name,
Derate_Amount,Abate_Amount,
Refund_Amount,Arrearage_Amount
ORDER BY Class_Code,Accounts,Charge_Date,Charge_Item_Code
with tb as
(
SELECT
L.Account_Receivable_List_No,
L.Charge_Date,
L.Re,
Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,
E.Authorize_No,
E.Charge_Standard,
R.Residence_Item_Name,
L.Charge_Item_Code,
I.Charge_Item_Name,
L.Accounts,
S.Advice_Note,
S.Name,S.Sex,
C.Class_Code,C.Class_Name,
L.Account_Receivable_Amount,
L.Derate_Amount,L.Abate_Amount,
L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount
FROM
Account_Receivable_List L,Charge_Item I,Charge_Icence E,Residence_Item R,Student S,Class C ,Specialty P
WHERE
(L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0)
AND (L.Residence_Item_No IS NOT NULL AND L.Residence_Item_No<>0)
AND L.Charge_Icence_No=E.Charge_Icence_No AND L.Residence_Item_No=R.Residence_Item_No
AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts
AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19)
UNION ALL
SELECT L.Account_Receivable_List_No,
L.Charge_Date,L.Re,
Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,
E.Authorize_No,E.Charge_Standard,
' ' AS Residence_Item_Name,
L.Charge_Item_Code,I.Charge_Item_Name,
L.Accounts,S.Advice_Note,S.Name,S.Sex,
C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,
L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount
FROM
Account_Receivable_List L,Charge_Item I,Charge_Icence E,Student S,Class C ,Specialty P
WHERE
(L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0)
AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0)
AND L.Charge_Icence_No=E.Charge_Icence_No
AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code
AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,
Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS Charge_Standard,
R.Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,
S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,
L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount FROM
Account_Receivable_List L,Charge_Item I,Residence_Item R,Student S,Class C ,Specialty P
WHERE (L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0)
AND (L.Residence_Item_No IS NOT NULL AND L.Residence_Item_No<>0)
AND L.Residence_Item_No=R.Residence_Item_No AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND
L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,
Charge_Date_Str=
CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS Charge_Standard,
' ' AS Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,
S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,
L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount FROM
Account_Receivable_List L,Charge_Item I,Student S,Class C ,Specialty P
WHERE
(L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0) AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0)
AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code
AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19)
) -- 嵌套表select
Account_Receivable_List_No,
Charge_Date,
Re,
Charge_Date_Str,
DESex,
Authorize_No,
Charge_Standard,
Residence_Item_Name,
Charge_Item_Code,
Charge_Item_Name,
Accounts,
Advice_Note,
Name,Sex,
Class_Code,Class_Name,
sum(Account_Receivable_Amount)Account_Receivable_Amount,
Derate_Amount,Abate_Amount,
Refund_Amount,
sum(Fact_Amount)Fact_Amount ,
Arrearage_Amount
FROM TB
group by Account_Receivable_List_No,
Charge_Date,
Re,
Charge_Date_Str,
DESex,
Authorize_No,
Charge_Standard,
Residence_Item_Name,
Charge_Item_Code,
Charge_Item_Name,
Accounts,
Advice_Note,
Name,Sex,
Class_Code,Class_Name,
Derate_Amount,Abate_Amount,
Refund_Amount,Arrearage_Amount
ORDER BY Class_Code,Accounts,Charge_Date,Charge_Item_Code
with TB as
(
SELECT
L.Account_Receivable_List_No,
L.Charge_Date,
L.Re,
Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,
E.Authorize_No,
E.Charge_Standard,
R.Residence_Item_Name,
L.Charge_Item_Code,
I.Charge_Item_Name,
L.Accounts,
S.Advice_Note,
S.Name,S.Sex,
C.Class_Code,C.Class_Name,
L.Account_Receivable_Amount,
L.Derate_Amount,L.Abate_Amount,
L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount
FROM
Account_Receivable_List L,Charge_Item I,Charge_Icence E,Residence_Item R,Student S,Class C ,Specialty P
WHERE
(L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0)
AND (L.Residence_Item_No IS NOT NULL AND L.Residence_Item_No<>0)
AND L.Charge_Icence_No=E.Charge_Icence_No AND L.Residence_Item_No=R.Residence_Item_No
AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND L.Accounts=S.Accounts
AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19)
UNION ALL
SELECT L.Account_Receivable_List_No,
L.Charge_Date,L.Re,
Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,
E.Authorize_No,E.Charge_Standard,
' ' AS Residence_Item_Name,
L.Charge_Item_Code,I.Charge_Item_Name,
L.Accounts,S.Advice_Note,S.Name,S.Sex,
C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,
L.Derate_Amount,L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount
FROM
Account_Receivable_List L,Charge_Item I,Charge_Icence E,Student S,Class C ,Specialty P
WHERE
(L.Charge_Icence_No IS NOT NULL AND L.Charge_Icence_No<>0)
AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0)
AND L.Charge_Icence_No=E.Charge_Icence_No
AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code
AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,
Charge_Date_Str=CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS Charge_Standard,
R.Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,
S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,
L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount FROM
Account_Receivable_List L,Charge_Item I,Residence_Item R,Student S,Class C ,Specialty P
WHERE (L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0)
AND (L.Residence_Item_No IS NOT NULL AND L.Residence_Item_No<>0)
AND L.Residence_Item_No=R.Residence_Item_No AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code AND
L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19) UNION ALL SELECT L.Account_Receivable_List_No,L.Charge_Date,L.Re,
Charge_Date_Str=
CASE RTRIM(SUBSTRING(L.Charge_Date,5,2))
WHEN 0 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年')
WHEN 1 THEN (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年上学期')
ELSE (RTRIM(SUBSTRING(L.Charge_Date,1,4))+'年下学期') END,
DESex=CASE WHEN S.Sex=0 THEN '男' ELSE '女' END,' ' AS Authorize_No,0 AS Charge_Standard,
' ' AS Residence_Item_Name,L.Charge_Item_Code,I.Charge_Item_Name,L.Accounts,S.Advice_Note,
S.Name,S.Sex,C.Class_Code,C.Class_Name,L.Account_Receivable_Amount,L.Derate_Amount,
L.Abate_Amount,L.Refund_Amount,L.Fact_Amount,
(L.Account_Receivable_Amount-L.Derate_Amount-L.Abate_Amount-L.Refund_Amount-L.Fact_Amount) AS Arrearage_Amount FROM
Account_Receivable_List L,Charge_Item I,Student S,Class C ,Specialty P
WHERE
(L.Charge_Icence_No IS NULL OR L.Charge_Icence_No=0) AND (L.Residence_Item_No IS NULL OR L.Residence_Item_No=0)
AND SUBSTRING(L.Charge_Date,1,4)='2006' AND L.Charge_Item_Code=I.Charge_Item_Code
AND L.Accounts=S.Accounts AND S.Class_No=C.Class_No AND C.Specialty_No=P.Specialty_No AND P.Department_No IN (19)
) -- 嵌套表select
Account_Receivable_List_No,
Charge_Date,
Re,
Charge_Date_Str,
DESex,
Authorize_No,
Charge_Standard,
Residence_Item_Name,
Charge_Item_Code,
Charge_Item_Name,
Accounts,
Advice_Note,
Name,Sex,
Class_Code,Class_Name,
sum(Account_Receivable_Amount)Account_Receivable_Amount,
Derate_Amount,Abate_Amount,
Refund_Amount,
sum(Fact_Amount)Fact_Amount ,
Arrearage_Amount
FROM TB
group by Account_Receivable_List_No,
Charge_Date,
Re,
Charge_Date_Str,
DESex,
Authorize_No,
Charge_Standard,
Residence_Item_Name,
Charge_Item_Code,
Charge_Item_Name,
Accounts,
Advice_Note,
Name,Sex,
Class_Code,Class_Name,
Derate_Amount,Abate_Amount,
Refund_Amount,Arrearage_Amount
ORDER BY Class_Code,Accounts,Charge_Date,Charge_Item_Code
其实基本上每个UNION ALL都是差不多的,但看上去太复杂了。