SQL Server查询每一行

时间:2018-05-06 06:47:59

标签: sql-server join

我有两个表,一个包含月份列表,第二个包含这些月份的销售数据。但是几个月没有销售,因此没有创建这些行。即表1包含1月至12月。表2包含jan与销售,feb与销售,但march没有销售,所以这一行不存在,4月与销售。

我的要求是我需要出售jan与销售,feb与销售,与nosales游行,4月与销售。

如何为此构建查询?

4 个答案:

答案 0 :(得分:1)

如果使用普通JOIN,则不会丢弃没有匹配的行。

你想要的是LEFT JOIN,它会保留第二个表中没有匹配行的行(你将输出FEB null

详细了解LEFT JOIN https://www.w3schools.com/sql/sql_join_left.asp

答案 1 :(得分:1)

使用左外连接

table1 left outer join
table2 on table1.month = table2.month

答案 2 :(得分:0)

如果您没有销售,则不会有任何与销售月份相匹配的ID,因此不会显示任何行。如果您想要显示该行,则必须使用左连接。

select *
from month m left join sales s on m.id_month = s.id_month

希望它有所帮助!

答案 3 :(得分:0)

您可以使用LEFT OUTER JOIN执行以下操作:

SELECT 
    MONTH, SUM(ISNULL(SALES, 0)) 
FROM 
    MONTHS AS M 
LEFT OUTER JOIN 
    SALES_TABLE AS S ON M.<PRIMARY KEY> = S.<FOREIGN KEY> 
GROUP BY 
    M.<PRIMARY KEY>