2016-07-21 35 views
0

我想要返回一個數據庫行上的所有單據詳細信息的列表,但我加入表的方式似乎沒有達到預期的效果,我有兩個類帳單和米:以正確的方式連接表

法案{BILLID,客戶名稱,城市,郵編,dateofissue,總金額} 米{meterid,BILLID,metertype,meterread,meterreaddate}

我嘗試做如下連接:

SELECT bill as a 
inner join meter as b on a.billId = b.billId 
where dateOfIssue between '1 jul 2015' and '30 jun 2016' 

如果賬單有兩種不同類型的米和一米類型是白天,一個是夜晚,然後我得到兩個這樣的賬單。如何選擇一行並設置一個列,以便如果metertype是夜晚,它將出現在名爲night的列標題中,如果它是一天,它將出現在名爲day的列標題中

什麼樣的連接類型最適合此目的?

回答

4

使用表別名是好的。使用縮寫表更好。另外,你應該使用標準的日期格式。

的回答你的問題是使用有條件聚集:

SELECT b.billId, 
     SUM(CASE WHEN metertype = 'day' then metterread else 0 end) as reading_day, 
     SUM(CASE WHEN metertype = 'night' then metterread else 0 end) as reading_night 
FROM bill b JOIN 
    meter m 
    ON b.billId = m.billId 
WHERE b.dateOfIssue between '2015-07-01' and '2016-06-30' 
GROUP BY b.billId; 
+0

這是你很奇怪縮進戈登......爲什麼變化? – Hogan

+0

@霍根。 。 。這是我縮進查詢的方式。在「使用SQL和Excel進行數據分析」的第1章中進行了介紹。 –

+0

將nvarchar值'day'轉換爲數據類型int – Jay

相關問題