2015-02-10 69 views
-1

我有一个查询,我剥离了一些不需要的字段并在where子句中放入一个限定符。 当导出为ex​​cel,并且Load Size(查看第一个查询)中的所有字段都被删除时,我得到84行。 在第二个查询中,我只需删除几个字段并添加限定符来删除那些加载大小为0的字段。我使用相同的参数运行它,但得到87行。我不知道什么消除触发了这一点。 原始查询:给出不同的值的查询

Declare @start Varchar(20), 
      @end VarChar(20), 
      @division varchar(2), 
      @group varchar(20) 

      set @start = '02/01/2015' 
      set @end = '02/09/2015' 
      set @division= '02' 
      set @group = 'anodize' 

    --Get the most recent order date 
SELECT 
    MAX(DATEPHYSICAL) AS 'DATEPHYSICAL', 
    ITEMID 
INTO 
    #tempOrderDates 
FROM 
    dbo.INVENTTRANS 
GROUP BY 
    ITEMID 

SELECT 
    ITEMID, 
    SUM(dbo.CUSTINVOICETRANS.QTY) AS 'Quanity', 
    SUM(LINEAMOUNTMST) AS 'Sales', 
    COUNT(DISTINCT dbo.CUSTINVOICEJOUR.SALESID) AS 'Total Orders' 
INTO 
    #tempItemRevenue 
FROM 
    dbo.CUSTINVOICEJOUR INNER JOIN 
    dbo.CUSTINVOICETRANS ON dbo.CUSTINVOICEJOUR.INVOICEID = dbo.CUSTINVOICETRANS.INVOICEID 
WHERE 
    dbo.CUSTINVOICETRANS.DIMENSION2_ IN (@division) 
    AND 
    CONVERT(DATETIME, dbo.CUSTINVOICETRANS.INVOICEDATE, 101) BETWEEN @start AND @end 
GROUP BY 
    ITEMID 

SELECT 
    ITEMGROUPID AS 'Process', 
    [DESCRIPTION] AS 'Division', 
    dbo.INVENTTABLE.ITEMID AS 'Item ID', 
    EXTITEM AS 'Cust Item ID', 
    dbo.INVENTTABLE.CUSTNAME AS 'Customer', 
    cu.[SalesGroup], 
    dbo.USERINFO.NAME AS 'Sales Engineer', 
    cu.[Street], 
    cu.[City], 
    cu.[State], 
    cu.[ZipCode], 
    ISNULL(PRICE/CASE WHEN PRICEUNIT = 0 THEN NULL ELSE PRICEUNIT END, 0) AS 'Unit Price', 
    PRICEDATE AS 'Date of Price', 
    LOADQTY AS 'Load Size', 
    LOADQTY * ISNULL(PRICE/CASE WHEN PRICEUNIT = 0 THEN NULL ELSE PRICEUNIT END, 0) AS 'Load Value', 
    Sales, 
    Quanity, 
    [Total Orders], 
    CEILING(ISNULL(Quanity/CASE WHEN [Total Orders] = 0 THEN NULL ELSE [Total Orders] END, 0)) AS 'Avg. Order Quanity', 
    DATEPHYSICAL AS 'Last Order Date' 
FROM 
    dbo.INVENTTABLE INNER JOIN 
    dbo.INVENTTABLEMODULE ON dbo.INVENTTABLE.ITEMID = dbo.INVENTTABLEMODULE.ITEMID INNER JOIN 
    #tempOrderDates ON dbo.INVENTTABLE.ITEMID = #tempOrderDates.ITEMID INNER JOIN 
    #tempItemRevenue ON dbo.INVENTTABLE.ITEMID = #tempItemRevenue.ITEMID INNER JOIN 
    dbo.DIMENSIONS ON NUM = dbo.INVENTTABLE.DIMENSION2_ INNER JOIN 
    dbo.CUSTTABLE cu ON ACCOUNTNUM = CUSTACCOUNT LEFT OUTER JOIN 
    dbo.SMMSALESUNITMEMBERS ON SALESUNITID = cu.SALESGROUP AND SALESMANAGER = 1 INNER JOIN 
    dbo.USERINFO ON ID = SALESMANID 
WHERE 
    MODULETYPE = 2 
    AND 
    ITEMGROUPID IN (@group) 
    AND 
    dbo.INVENTTABLE.DIMENSION2_ IN (@division) 

DROP TABLE #tempOrderDates 
DROP TABLE #tempItemRevenue 

修改后的查询摆脱推销员的东西,客户信息:

Declare @start Varchar(20), 
     @end VarChar(20), 
     @division varchar(2), 
     @group varchar(20) 

     set @start = '02/01/2015' 
     set @end = '02/09/2015' 
     set @division= '02' 
     set @group = 'anodize' 



SELECT 
    ITEMID, 
    SUM(dbo.CUSTINVOICETRANS.QTY) AS 'Quanity', 
    SUM(LINEAMOUNTMST) AS 'Sales', 
    COUNT(DISTINCT dbo.CUSTINVOICEJOUR.SALESID) AS 'Total Orders' 
INTO 
    #tempItemRevenue 
FROM 
    dbo.CUSTINVOICEJOUR INNER JOIN 
    dbo.CUSTINVOICETRANS ON dbo.CUSTINVOICEJOUR.INVOICEID = dbo.CUSTINVOICETRANS.INVOICEID 
WHERE 
    dbo.CUSTINVOICETRANS.DIMENSION2_ IN (@division) 
    AND 
    CONVERT(DATETIME, dbo.CUSTINVOICETRANS.INVOICEDATE, 101) BETWEEN @start AND @end 
GROUP BY 
    ITEMID 

SELECT 
    ITEMGROUPID AS 'Process', 
    [DESCRIPTION] AS 'Division', 
    LOADQTY AS 'Load Size', 
    LOADQTY * ISNULL(PRICE/CASE WHEN PRICEUNIT = 0 THEN NULL ELSE PRICEUNIT END, 0) AS 'Load Value', 
    Sales, 
    Quanity 

FROM 
    dbo.INVENTTABLE 
    INNER JOIN 
    dbo.INVENTTABLEMODULE ON dbo.INVENTTABLE.ITEMID = dbo.INVENTTABLEMODULE.ITEMID 
    inner JOIN 
    #tempItemRevenue ON dbo.INVENTTABLE.ITEMID = #tempItemRevenue.ITEMID 
    INNER JOIN 
    dbo.DIMENSIONS ON NUM = dbo.INVENTTABLE.DIMENSION2_ 


WHERE 
    MODULETYPE = 2 
    AND 
    ITEMGROUPID IN (@group) 
    AND 
    dbo.INVENTTABLE.DIMENSION2_ IN (@division) 
    and LOADQTY >0 


DROP TABLE #tempItemRevenue 

我不;吨了解缺什么,让我不同的结果。我试着逐个挑选查询,但我没有看到它打破的地方。

+0

您的查询看起来像您期望在您的组和变量中具有多个值。你不可能通过变化的方式来做到这一点。 – 2015-02-10 16:33:53

回答

1

无连接的问题很可能在你删除的加入3个额外的行。如果您删除了推销员和客户表,那么您可能会将这些连接删除的行带回。

我建议检查连接中的值,看看有什么不同。您可能有一些NULL或某些不存在的ID或行不正确的行:SALESMANAGER = 1

看到这里只有84行和87行,你应该能够通过眼睛检查差异,然后检查这些记录的差异。

0

我认为问题在于你还删除了一些INNER JOIN:这可能会导致更多的行出现。尝试仅删除字段并将第一个查询留在INNER JOINS中。

问候。

0

第一个查询是你加入表CUSTTABLE而第二个查询不是。

很可能你会发现有到CUSTTABLLE

0

我的第一选择是删除#tempOrderDates或CustTable。他们在内部加入,所以删除coud使其他记录可用,不在原始查询中。

由于您的结果集非常小,请查找第二个结果集中记录的示例,而不是第一个结果集。然后,将原始查询转换为select *,并将您在第二个查询中删除的所有内部连接更改为左连接,并查看表数据是如何将这些记录带入的。您可能会考虑过滤只记录s)你有兴趣看到。

相关问题