2016-05-30 51 views
2

我有2个表,客户和销售的SQL Server 2014选择记录与最大功能的其他表不存在

我需要从销售中提取所有尚未被加载到客户表和我建立客户以下在我被要求添加2 MAX()字段之前,查询工作得很好。

下面是该查询:

INSERT INTO Customers (.....) 
    SELECT distinct 
     d.UserName, 
     d.postalCode, 
     d.location, 
     d.country, 
     max(d.invoiceamount) invoiceamount, 
     max(d.itemscount) itemscount, 
     d.storeID 
    FROM S.dbo.[Sales] d 
    LEFT JOIN G.dbo.Customers s ON d.Username=s.UserName 
    WHERE s.UserName IS NULL 
    AND d.username IS NOT NULL 
    GROUP BY d.UserName, d.postalCode, d.location,  
    d.country, max(d.invoiceamount), max(d.itemscount), d.storeID 

但查询不分组接受MAX():

在我以前CROSS APPLY另一种情况,但因为在这里我要提取记录,其中用户名是NULL在一张表中......我不知道如何构建查询。

你能给我一些提示吗?

+0

尝试删除'GROUP BY'子句中的'MAX'函数及其列:GROUP BY d.UserName,d.postalCode,d.location, d.country,d.storeID' –

+1

Yes Felix,you '完全正确,今晚太累了。事实上,我合并了2个不同的邮件,并发布了错误的问题:真正的问题是完全不同的。如果我提出另一个问题,或许会更好。如果提到原始问题,您的答案是完全正确的。对不起 – Joe

+0

请不要在你提出问题后完全改变你的问题。如果你解决了原来的问题并想问一个新的问题,那么你应该(1)接受答案,如果答案帮助你解决了问题,并且(2)提出一个新问题。 –

回答

2

你并不需要在group bymax()

INSERT INTO Customers (.....) 
    SELECT d.UserName, d.postalCode, d.location, d.country, 
      max(d.invoiceamount) invoiceamount, 
      max(d.itemscount) itemscount, 
      d.storeID 
    FROM S.dbo.[Sales] d LEFT JOIN 
     G.dbo.Customers s 
     ON d.Username = s.UserName 
    WHERE s.UserName IS NULL AND d.username IS NOT NULL 
    GROUP BY d.UserName, d.postalCode, d.location, d.country, d.storeID; 

所有非聚合列,应在group by

+0

是的,戈登,你说得很对,今晚太累了。事实上,我合并了2封不同的邮件,并发布了错误的问题:真正的问题是完全不同的。 如果我提出另一个问题,或许会更好。如果提到原始问题,您的答案是完全正确的。再次抱歉。 – Joe

相关问题