SQL Server 2012将两个表中的列合并到一个表中
我在不同的地方有两张桌子 最终结果必须是SQL Server 2012将两个表中的列合并到一个表中,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,我在不同的地方有两张桌子 最终结果必须是 VendorName InvoiceNumber InvoiceTotal VendorName位于名为Vendors InvoiceNumber和InvoiceTotal位于名为Invoices 它需要在结果中显示所有供应商,即使供应商没有任何发票,也要先显示最大的发票总额,然后按字母顺序对供应商名称进行排序 我试图把发票加入我的账户 SELECT VendorName FROM Vendors 但我无法理解语法:/使用左连接来包括那些没有发
VendorName InvoiceNumber InvoiceTotal
VendorName
位于名为Vendors
InvoiceNumber
和InvoiceTotal
位于名为Invoices
它需要在结果中显示所有供应商,即使供应商没有任何发票,也要先显示最大的发票总额,然后按字母顺序对供应商名称进行排序
我试图把发票加入我的账户
SELECT VendorName FROM Vendors
但我无法理解语法:/使用
左连接来包括那些没有发票的供应商,如:
SELECT
v.VendorName, i.InvoiceNumber, i.InvoiceTotal
FROM Vendors v
LEFT JOIN Invoices i ON v.Id = i.VendorID
ORDER BY i.InvoiceTotal DESC, v.VendorName ASC
你是说:
select VendorName
,Count(InvoiceAmount) As InvoiceNumber
,Sum(InvoiceAmount) As InvoiceTotal
from Vendor
left join Invoices on Vendor.VendorId = Invoices.VendorId
group by VendorName
order by 3 Desc
您需要使用左联接
来联接与两个表相关的列上的两个表。使用左联接
将返回所有供应商
,即使他们在发票
表中没有条目:
select v.vendorname,
i.invoicenumber,
i.invoicetotal
from vendors v
left join invoices i
on v.vendorid = i.vendorid -- this is the column relating the two tables
order by i.invoicetotal DESC, v.vendorname ASC
如果您需要学习JOIN
语法的帮助,这里有一个很棒的您需要的帮助。假设PK/FK是VendorID
:
SELECT v.VendorName, i.InvoiceNumber, i.InvoiceTotal
FROM Vendors v
LEFT OUTER JOIN Invoices i ON v.VendorID = i.VendorID
ORDER BY v.VendorName ASC
, i.InvoiceTotal DESC
尝试:
您希望将供应商分组在一起,还是供应商可以在结果集中出现一次以上?例如,您可以使用SUM(Invoices.InvoiceTotal)来获取InvoiceTotals的总数。请发布您的模式。两个表位于不同位置是什么意思?不同的数据库?不同的服务器?例如,您可以在上找到一些好的基本SQL教程。看看它们,它们将帮助您理解SQL语法!OP希望首先显示最大的发票总额-因此您应该按InvoiceTotal
(而不是InvoiceNumber
)排序。我相信为什么按分组?我看不出OP只要求最大的InvoiceTotal
值-他希望输出按该列排序-但不分组-否?为什么要按分组?我看不出OP只要求最大的InvoiceTotal
值-他希望输出按该列排序-但不分组-否?只是假设,因为他从未告诉我们该表有发票总额的聚合字段。。。在没有分组的情况下,他可以选择另外4个答案。
SELECT Vendors.VendorName, Invoices.InvoiceNumber, Invoices.InvoiceTotal
FROM Vendors LEFT JOIN Vendors.VendorID on Invoices.VendorId
ORDER BY Invoices.InvoiceTotal DESC