【问题标题】:joining tables in correct way以正确的方式连接表格
【发布时间】:2016-07-21 15:08:52
【问题描述】:

我试图返回一个数据库行上所有账单详细信息的列表,但我加入表格的方式似乎没有达到预期的效果,我有两个类账单和计量:

bill { billid, customername, town, postcode, dateofissue, totalamount } 计量器 { 计量器 ID、计费器、计量器类型、计量器、计量器日期 }

我正在尝试按如下方式进行连接:

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的列标题中

哪种联接类型最适合此目的?

【问题讨论】:

    标签: sql join


    【解决方案1】:

    使用表别名很好。使用表格的缩写会更好。此外,您应该使用标准日期格式。

    您的问题的答案是使用条件聚合:

    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;
    

    【讨论】:

    • Gordon 的缩进很奇怪……为什么要改变?
    • @Hogan。 . .这是我缩进查询的方式。在“使用 SQL 和 Excel 进行数据分析”的第 1 章中进行了描述。
    • 将 nvarchar 值 'day' 转换为数据类型 int 时出现错误转换失败
    • @Jay 在您的原始问题中进行编辑并将所有数据类型与您的列名一起放置
    • 非常感谢@GordonLinoff
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2011-07-01
    • 2021-12-07
    相关资源
    最近更新 更多