2017-08-04 27 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