根据销售产品类型

时间:2016-10-07 14:51:31

标签: sql tsql

我有一个数据集可以返回卖家列表以及他们每次销售的平均价格。

我需要过滤此数据集,因此它只显示销售这两种产品类型的卖家。我试图对它进行分组,这使我对所有选择元素进行分组,并且不会返回任何内容。

以下是我目前使用的查询。

SELECT  [Agent] ,
        Contract ,
        QPivot.[1] AS Q1 ,
        QPivot.[2] AS Q2 ,
        QPivot.[3] AS Q3 ,
        QPivot.[4] AS Q4
FROM    ( SELECT    c.sagent_number [Agent] ,
                    YEAR(c.dtcontract_entered) [Year] ,
                    CASE WHEN c.scontract_no LIKE '%zm%' THEN 'Product 2'
                         WHEN c.scontract_no LIKE '%dap%' THEN 'Product 1'
                         WHEN c.scontract_no LIKE '%v0%' THEN 'Product 1'
                         ELSE NULL
                    END [Contract] ,
                    DATEPART(QUARTER, c.dtcontract_entered) [Quarter] ,
                    AVG(c.cretail_rate - c.cnet_rate) [AVG Sales]
          FROM      scs_contracts c
          WHERE     c.iproduct_type_id = 4
          AND c.sstatus IN ('P', 'A', 'C', 'E')
          GROUP BY  c.sagent_number ,
                    YEAR(c.dtcontract_entered) ,
                    CASE WHEN c.scontract_no LIKE '%zm%' THEN 'Product 2'
                         WHEN c.scontract_no LIKE '%dap%' THEN 'Product 1'
                         WHEN c.scontract_no LIKE '%v0%' THEN 'Product 1'
                         ELSE NULL
                    END ,
                    DATEPART(QUARTER, c.dtcontract_entered)
        ) AS QuarterlyData PIVOT( AVG([AVG Sales]) FOR Quarter IN ( [1], [2], [3], [4] ) ) AS QPivot
WHERE   Contract IS NOT NULL
AND Year = 2016
AND [Agent] <> '2'
AND [Agent] <> '3'
ORDER BY [QPivot].[Agent], QPivot.Contract asc

以下是返回数据的示例:

enter image description here

我正在尝试过滤掉仅售出单品的卖家。所有销售产品1和产品2的卖家都想留在数据集中。这可能吗?

不应出现以颜色突出显示的图像。我已经尝试将它包装成一个选择,我尝试过分组。我确定它必须以某种方式存在。我曾试图以某种方式对[Agent]进行计数,但如果没有对每个选择列进行分组,我都无法进行计数。我此刻不知所措。

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以将QPIVOT作为临时表,然后检查是否存在其他产品:

...

 SELECT  [Agent] ,
            Contract ,
            Q1 ,
            Q2 ,
            Q3 ,
            Q4
    FROM #QPIVOT
    WHERE EXISTS 
        (
        SELECT 1 FROM #QPIVOT QP2 where QP2.AGENT=#QPIVOT.AGENT AND QP2.Contract<>#QPIVOT.Contract)

 ORDER BY [Agent],Contract asc