2017-08-04 58 views
0

早上好,关于使用SQL创建报告的问题。花了一些时间试图找出如何做到这一点。因此,这里的代码...SQL报告整理列/行

select 
c.searchname as 'Client Name', 
w.Date as 'Date', 
j.Name as 'Engagement Name', 
j.JobID as 'Eng #', 
sum(units) as 'Hours', 
ca.Description as 'Description' 
from tblWip w 
join tblJob j on w.jobid=j.jobid 
join tblclient c on j.clientid=c.clientid 
join tblChargeAccs ca on w.chargeacid=ca.ChargeAcID 
where j.PartnerID='19' 
group by c.searchname, j.name, w.date, j.jobid, w.units, w.amount, ca.description 
order by c.searchname, w.date asc 

,输出这个...

enter image description here

我想格式化输出更喜欢这个...

enter image description here

有关如何重新排列这些列和行的任何建议?任何帮助表示赞赏。感谢您的阅读!

+3

首先 - 您不应该仅使用SQL进行报告。为此使用前端工具。其次,如果您想要像报告那样格式化,则必须在日期列中进行转换,然后总结小时数。我们需要知道你的数据库系统,你应该知道查询应该是动态的,因为你不知道哪些日期是需要的。 –

+0

完美,这就是我想知道的。谢谢! – MarkFro

回答

1

这些列的排列方式与您在SQL的Select子句中指定的完全相同。 行按您在Order By Clause中指定的顺序排列。

因此,要改变这些,只是改变你如何写这两个条款:

select c.searchname 'Client Name', 
    j.Name 'Engagement Name', 
    j.JobID 'Eng #', 
    sum(units) hours, 
from tblWip w 
    join tblJob j on w.jobid=j.jobid 
    join tblclient c on j.clientid=c.clientid 
    join tblChargeAccs ca on w.chargeacid=ca.ChargeAcID 
where j.PartnerID='19' 
group by c.searchname, j.name, w.date, 
    j.jobid, w.units, w.amount, ca.description 
order by c.searchname, w.date asc 

获取列,以反映日期并具有数据中的每个日期单独的列更难。这被称为Pivot数据。谷歌这是它自己的话题。大多数数据库产品都有一个内置的函数(在SQL Server中称为Pivot),它会为您执行此操作,但您需要阅读文档(提供一个链接)以了解如何正确使用它。

如果您事先知道需要列的日期,那么可以在没有动态透视的情况下编写它。使用您的示例数据:

select c.searchname 'Client Name', 
    j.Name 'Engagement Name', 
    j.JobID 'Eng #', 
    sum(case when w.Date = '25Jun2017' then units end) '25Jun2017hours', 
    sum(case when w.Date = '26Jun2017' then units end) '26Jun2017hours', 
    sum(case when w.Date = '27Jun2017' then units end) '27Jun2017hours' 
from tblWip w 
    join tblJob j on w.jobid=j.jobid 
    join tblclient c on j.clientid=c.clientid 
    join tblChargeAccs ca on w.chargeacid=ca.ChargeAcID 
where j.PartnerID='19' 
group by c.searchname, j.name, w.date, 
    j.jobid, w.units, w.amount, ca.description 
order by c.searchname, w.date asc 
+0

太好了,这是我感兴趣的路线图。谢谢你解释这个! – MarkFro