Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 您如何从两个不同的公司中选择前五名?_Sql_Sql Server - Fatal编程技术网

Sql 您如何从两个不同的公司中选择前五名?

Sql 您如何从两个不同的公司中选择前五名?,sql,sql-server,Sql,Sql Server,我试图做这个1SQL语句,其中第一个1的公司编号是1,第二个是2 理想的结果是从每家公司中选出最优秀的销售人员,在本例中有2家公司,但我需要一个查询,根据公司数量(1,2,3)得出结果(5,10,15) ** 从第一个到第二个** Total Deals First Last 1 MARK O'DELL 1 Edward Thatch 1 FranK Cavelier 1 Ch

我试图做这个1SQL语句,其中第一个1的公司编号是1,第二个是2

理想的结果是从每家公司中选出最优秀的销售人员,在本例中有2家公司,但我需要一个查询,根据公司数量(1,2,3)得出结果(5,10,15)

** 从第一个到第二个**

Total Deals First      Last
1           MARK       O'DELL
1           Edward     Thatch
1           FranK      Cavelier
1           Chris      Fluffer
1           Chris      Farley

首先,可以简化每个子查询:

  SELECT COUNT(d.DealNumber) AS Deals, e.FirstName AS First,
         e.LastName AS Last, e.EntityNumber
  FROM DealEmployee de INNER JOIN
       Entity e
       ON de.EmployeeID = e.EntityID RIGHT OUTER JOIN
       Deal d
       ON de.DealID = d.DealID
  WHERE d.PurchaseDate >= '2014-01-01' AND 
        d.PurchaseDate <= '2014-11-01' AND 
        d.CompanyNumber = '1' AND d.Status = 2 AND de.Type = 'Salesperson'
  GROUP BY e.FirstName, e.LastName, e.EntityNumber
  ORDER BY TotalDeals DESC;
SELECT t.*
FROM (SELECT COUNT(d.DealNumber) AS Deals, e.FirstName AS First,
             e.LastName AS Last, e.EntityNumber,
             ROW_NUMBER() OVER (PARTITION BY e.FirstName, e.LastName, e.EntityNumber
                                ORDER BY COUNT(d.DealNumber) DESC) as seqnum
      FROM DealEmployee de INNER JOIN
           Entity e
           ON de.EmployeeID = e.EntityID RIGHT OUTER JOIN
           Deal d
           ON de.DealID = d.DealID
      WHERE d.PurchaseDate >= '2014-01-01' AND 
            d.PurchaseDate <= '2014-11-01 00:00:00' AND 
            d.CompanyNumber = '1' AND d.Status = 2 AND de.Type = 'Salesperson'
      GROUP BY e.FirstName, e.LastName, e.EntityNumber
     ) t
WHERE seqnum <= 5
ORDER BY TotalDeals DESC;

你希望结果中有多少条记录:5条(两家公司加起来)或10条(每家公司5条)?每个公司5条,但如果能在超过2家公司的情况下工作就好了。请用样本数据和期望的结果编辑你的问题。好的,我做了,希望答案是显示每个公司的前5名销售经理,但在这种情况下,有多个公司。我会将公司编号设为变量吗?这有可能吗?这会带来59笔交易,而我只想让每家公司得到5笔。您还可以帮助我理解Seqnum、T.*和分区的含义吗?Seqnum变量应该是销售人员的计数吗?因为它为59个变量中的每一个返回1rows@Learningyouslowly . . . 关键是
partitionby
子句,但我不确定哪个是正确的。从您的文本来看,它似乎是按公司编号划分的,但该字段不起作用。它必须是
分组依据
字段之一。您有什么建议?
  SELECT COUNT(d.DealNumber) AS Deals, e.FirstName AS First,
         e.LastName AS Last, e.EntityNumber
  FROM DealEmployee de INNER JOIN
       Entity e
       ON de.EmployeeID = e.EntityID RIGHT OUTER JOIN
       Deal d
       ON de.DealID = d.DealID
  WHERE d.PurchaseDate >= '2014-01-01' AND 
        d.PurchaseDate <= '2014-11-01' AND 
        d.CompanyNumber = '1' AND d.Status = 2 AND de.Type = 'Salesperson'
  GROUP BY e.FirstName, e.LastName, e.EntityNumber
  ORDER BY TotalDeals DESC;
SELECT t.*
FROM (SELECT COUNT(d.DealNumber) AS Deals, e.FirstName AS First,
             e.LastName AS Last, e.EntityNumber,
             ROW_NUMBER() OVER (PARTITION BY e.FirstName, e.LastName, e.EntityNumber
                                ORDER BY COUNT(d.DealNumber) DESC) as seqnum
      FROM DealEmployee de INNER JOIN
           Entity e
           ON de.EmployeeID = e.EntityID RIGHT OUTER JOIN
           Deal d
           ON de.DealID = d.DealID
      WHERE d.PurchaseDate >= '2014-01-01' AND 
            d.PurchaseDate <= '2014-11-01 00:00:00' AND 
            d.CompanyNumber = '1' AND d.Status = 2 AND de.Type = 'Salesperson'
      GROUP BY e.FirstName, e.LastName, e.EntityNumber
     ) t
WHERE seqnum <= 5
ORDER BY TotalDeals DESC;