在SQL中组合表(仅适用于某些行)

时间:2014-09-16 18:24:33

标签: sql where-clause

我甚至不确定如何在主题中说出这一点。但是,我有一个SELECT语句,它从名为CONTACTS(F_ame,L_Name,Address,Email等)的SQL视图中提取信息。我有一个名为INVOICES的视图,其中包含联系人视图中成员的购买信息。请记住,INVOICES视图可以为每个成员多次购买不同的产品。这两个视图可以与ContactID密钥链接

我只需要在INVOICES视图中显示某个产品(EADP包)(如果已购买),该视图与购买它的会员在同一行。我还需要保留整个成员列表。因此,如果我使用WHERE子句仅提取该产品,它只会给我那些购买该产品的人。我需要保留整个成员列表,并且仍然有一个列,显示购买它的人的特定产品。希望有道理。

很抱歉,但有3个观看次数,而不是2.这是我到目前为止的观点:

SELECT     Contact.FirstName, Contact.LastName, Contact.CFSDesignation, Contact.EMailAddress1, Contact.Telephone1, Contact.DefaultPriceLevelIdName
FROM         Contact INNER JOIN
                      FilteredInvoice ON Contact.ContactId = FilteredInvoice.contactid INNER JOIN
                      FilteredInvoiceDetail ON FilteredInvoice.invoiceid = FilteredInvoiceDetail.invoiceid
WHERE     (Contact.DefaultPriceLevelIdName = 'member') AND FilteredInvoiceDetail.productidname = 'eAudiology 2014 Unlimited On-Demand Package'

这样可以正常使用,但只会拉动购买包的人。我需要来自CONTACTS的整个会员列表(大约10,000条记录)以及显示上述产品的产品列,以供购买者使用。我相信是与连接有关,但不能理解它。

关闭,但它不喜欢关键字" ON":

另外。在你之前的回答中," C"和"我"用于?

SELECT     Contact.FirstName, Contact.LastName, Contact.CFSDesignation, Contact.EMailAddress1, Contact.Telephone1, Contact.DefaultPriceLevelIdName
FROM         Contact  LEFT JOIN
                      FilteredInvoice ON Contact.ContactId = FilteredInvoice.contactid LEFT JOIN (SELECT FilteredInvoiceDetail.productidname
                      FROM FilteredInvoiceDetail
                      WHERE productidname = 'eAudiology 2014 Unlimited On-Demand Package') ON FilteredInvoice.invoiceid = FilteredInvoiceDetail.invoiceid
WHERE     (Contact.DefaultPriceLevelIdName = 'member') 

2 个答案:

答案 0 :(得分:0)

SELECT * 
FROM Contacts C 
LEFT JOIN ( SELECT * 
            FROM Invoices
            WHERE Product = 'EADP Package') I
    ON C.ContactID = I.ContactID 

答案 1 :(得分:0)

这最终对我有用:

SELECT DISTINCT Contact.ContactId,Contact.FirstName,Contact.LastName,Contact.CFSDesignation,Contact.EMailAddress1,Contact.DefaultPriceLevelIdName,productidname 从联系LEFT JOIN                       FilteredInvoice ON Contact.ContactId = FilteredInvoice.contactid LEFT JOIN(SELECT FilteredInvoiceDetail.productidname,FilteredInvoiceDetail.invoiceid                       FROM FilteredInvoiceDetail                       WHERE productidname =' eAudiology 2014无限按需套餐' OR productidname =' eAudiology 2014无限按需Pkg续订')I ON FilteredInvoice.invoiceid = I.invoiceid

WHERE(Contact.DefaultPriceLevelIdName =' member' OR DefaultPriceLevelIdName =' student')

按姓氏排序