我有这个 SELECT 声明:

SELECT SUM(dbo.DLData.Quantity)
    FROM dbo.MasterDates
    JOIN dbo.DLData ON MasterDates.[ID] = dbo.DLData.DownloadID
    WHERE dbo.MasterDates.[Date] BETWEEN @From AND @To
    AND dbo.MasterDates.SiteID = @X

如果你插 @From, @To@X 它的工作。这个是右手边的一个比较。但是在比较 @X 需要来自左手边的 SELECT 在外面是执行上的每一个测试 SiteID 在设定。没有这一条款的主要条款的工作。他们需要一起去。这里是完全的选择的发言与上述选择留。最终,这两个条款具有将确定的关键产品的网站。

--INSERT INTO SiteKeyProducts
    SELECT dbo.MasterDates.SiteID as SiteID , dbo.DLData.Product as ProductID
        FROM dbo.MasterDates
        JOIN dbo.DLData ON dbo.MasterDates.[ID] = dbo.DLData.DownloadID
        WHERE dbo.MasterDates.[Date] BETWEEN @From AND @To
        GROUP BY dbo.MasterDates.SiteID , dbo.DLData.Product
        HAVING
            SUM(dbo.DLData.Quantity) > 960 OR
            SUM(dbo.DLData.Quantity) > (SELECT SUM(dbo.DLData.Quantity)
                            FROM dbo.MasterDates
                            JOIN dbo.DLData ON MasterDates.[ID] = dbo.DLData.DownloadID
                            WHERE dbo.MasterDates.[Date] BETWEEN @From AND @To
                            AND dbo.MasterDates.SiteID = @X)
        ORDER BY dbo.MasterDates.SiteID 

你怎么使用外条款在内的声明吗? 该死,我甚至不知道如果我是使用正确的术语来描述我的问题。

Arrgghh设定基础的逻辑不我的头!

有帮助吗?

解决方案 2

马特*惠特菲尔德问。sqlservercentral 回答#网站提出了以下答案 这个问题:

SELECT outerMaster.SiteID as SiteID , dbo.DLData.Product as ProductID
    FROM dbo.MasterDates outerMaster
    JOIN dbo.DLData ON outerMaster.[ID] = dbo.DLData.DownloadID
    WHERE outerMaster.[Date] BETWEEN @From AND @To
    GROUP BY outerMaster.SiteID , dbo.DLData.Product
    HAVING
            SUM(dbo.DLData.Quantity) > 960 OR
            SUM(dbo.DLData.Quantity) > (SELECT SUM(dbo.DLData.Quantity)
                                          FROM dbo.MasterDates innerMaster
                                          JOIN dbo.DLData ON innerMaster.[ID] = dbo.DLData.DownloadID
                                            WHERE innerMaster.[Date] BETWEEN @From AND @To
                                              AND innerMaster.SiteID = outerMaster.SiteID)
    ORDER BY outerMaster.SiteID

RickD 想出了这个答案的 ask.sqlteam.com 网站:

--INSERT INTO SiteKeyProducts    
SELECT 
        MD.SiteID as SiteID , 
        DLD.Product as ProductID        
FROM dbo.MasterDates MD      
JOIN dbo.DLData DLD
ON MD.[ID] = DLD.DownloadID
LEFT JOIN (SELECT SiteID, 
                                SUM(dbo.DLData.Quantity) SumMDQuantity
                                FROM dbo.MasterDates
                                JOIN dbo.DLData ON MasterDates.[ID] = dbo.DLData.DownloadID
                                WHERE dbo.MasterDates.[Date] BETWEEN @From AND @To
                                GROUP BY SiteID) as sumMD
ON sumMD.SiteID = MD.SiteID
WHERE MD.[Date] BETWEEN @From AND @To        
GROUP BY MD.SiteID , DLD.Product        
HAVING                
SUM(DLD.Quantity) > 960 OR                
SUM(DLD.Quantity) > sumMD.SumMDQuantity
ORDER BY MD.SiteID

这两个伟大工作,虽然马特做好Ricks的努力,尽管我最初查看,参加将会更快。马特做需要-2m10时Ricks需要-2m40年代。这是最大的活数据库作为这两个时间不超过10秒的测试数据库。

其他提示

我想你想加入这个子查询,不具有语句中使用它

SELECT SUM(dbo.DLData.Quantity)
    FROM dbo.MasterDates
    JOIN dbo.DLData ON MasterDates.[ID] = dbo.DLData.DownloadID
    WHERE dbo.MasterDates.[Date] BETWEEN @From AND @To
    AND dbo.MasterDates.SiteID = @X
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top