sql为每个分支生成一行

sql为每个分支生成一行,sql,reportbuilder3.0,Sql,Reportbuilder3.0,我正在开发以下SQL以创建固定资产对账报告。理想情况下,我尝试为每个分支创建一行,其中包含以下字段: (1) Branch (2) Department (3) Fixed Asset Account (4) Fixed Asset Amount (5) PS Fixed Asset Amount (6) Difference between Cols 4 and 5 (7) Accum Depreciation Account (8) Accum Depreciation Amount (9

我正在开发以下SQL以创建固定资产对账报告。理想情况下,我尝试为每个分支创建一行,其中包含以下字段:

(1) Branch
(2) Department
(3) Fixed Asset Account
(4) Fixed Asset Amount 
(5) PS Fixed Asset Amount
(6) Difference between Cols 4 and 5
(7) Accum Depreciation Account
(8) Accum Depreciation Amount
(9) PS Accum Depreciation Amount
(10) Difference between cols 8 and 9
SQL返回我需要的数据,但许多分支有两行,如下所示:

0101  10001010   1501  (blank)   (blank)  (blank)   1601  100.00   101.00   1.00
0101  10001010   1501   250.00   255.00    5.00     1601  blank  blank     blank
我想看到的是:

0101   1001010   1501   250.00   255.00   5.00   1601   100.00    101.00   1.00
以下是我当前的sql:

SELECT 
ir.ERAC_BRANCH_LGCY_CD AS Branch,
pdr.Department,

pdr.ACCOUNT_FA AS FA_ACCT,
SUM(pdr.COST) AS FA_AMT,
CASE WHEN pdr.account_fa = pgal.acct_nbr THEN pgal.pstd_ttl_amt END AS PS_FA_AMT,
fa_amt - ps_fa_amt AS FA_DIFF,

pdr.account_ad AS AD_ACCT,
SUM(pdr.depr_ltd) AS AD_AMT,
CASE WHEN pdr.account_ad = pgal.acct_nbr THEN pgal.pstd_ttl_amt  END AS PS_AD_AMT,
ad_amt - ps_ad_amt AS AD_DIFF

FROM PSFS.PS_DEPR_RPT pdr 

INNER JOIN PSFS.PS_GL_ACCT_LDGR PGAL 
    ON pdr.deptid =grp_br_ps_org_id
    AND (pdr.account_fa = pgal.acct_nbr or pdr.account_ad = pgal.acct_nbr)
    AND fiscal_yr_mth_nbr = 201508

INNER JOIN INTGRT_RPT.DIM_LOCATION IR 
      ON pdr.deptid = ir.erac_branch_ps_org_cd AND ir.curr_lrd_row_flg = 1

WHERE pdr.BUSINESS_UNIT = 'A0465'
AND pdr.BOOK = 'PERFORM'
AND pdr.FISCAL_YEAR = 2015
AND pdr.ACCOUNTING_PERIOD = 8
AND pdr.GROUP_ASSET_FLAG <> 'M'

GROUP BY 1,2,3,5, 7,9

ORDER BY 3,1, 2
选择
ir.ERAC_分行作为分行,
人事部,
pdr账户作为固定账户,
金额(pdr.成本)作为固定资产金额,
当pdr.account\U fa=pgal.acct\U nbr,则pgal.pstd\U ttl\U金额结束为PS\U fa\U金额,
固定资产金额-固定资产固定资产固定资产金额作为固定资产差异,
pdr.账户作为账户,
金额(pdr.depr_ltd)作为AD_金额,
当pdr.account\U ad=pgal.acct\U nbr时,则pgal.pstd\U ttl\U金额结束为PS\U ad\U金额,
ad_金额-ps_ad_金额作为ad_差异
来自PSFS.PS_DEPR_RPT pdr
内部连接PSFS.PS\u GL\u ACCT\u LDGR PGAL
在pdr.deptid=grp\u br\u ps\u org\u id上
和(pdr.account\U fa=pgal.acct\U nbr或pdr.account\U ad=pgal.acct\U nbr)
财政年度和中期nbr=201508
内部连接INTGRT_RPT.DIM_位置IR
在pdr.deptid=ir.erac\u branch\u ps\u org\u cd和ir.curr\u lrd\u row\u flg=1上
其中pdr.BUSINESS_UNIT='A0465'
和pdr.BOOK='PERFORM'
和pdr.财政年度=2015年
和pdr.会计期间=8
和pdr.GROUP_ASSET_标志'M'
按1,2,3,5,7,9分组
按3,1,2的顺序排列

解决这个问题的简单方法是,对您怀疑可能为null或空白的每一列/字段使用聚合函数
Max()
。聚合函数在大多数SQL引擎中忽略空值

示例

select * from tablename

id         col1               col2      col3
---------- ---------- ----------
1         Joey               250.00     255.00
1        (blank)            (blank)    (blank)
使用Max()


我认为
按1,2,3,5,7,9分组没有意义。它应该是字段名或字段上的计算函数,而不是普通数字<代码>分组依据
与接受代表select上字段列表的数字的排序依据不同。这是用于哪个RDBMS的?请添加一个标记,以指定您使用的是
mysql
postgresql
sql server
oracle
db2
-还是其他完全相同的东西。@plyus………感谢您的反馈。我感谢你的帮助。我刚刚开始编写sql,其中一些东西比我现在的技能更高级。我感谢你抽出时间回答这个问题。
Select id, max(col1),max(col2), max(col3)
FROM tablename
Group by.....

     id         col1               col2      col3
    ---------- ---------- ----------
    1         Joey             250.00        250.00